Почему мое правило перезаписи IIS 7 не работает?
Я перенес блог Wordpress Mu под Linux в WP 3 под IIS 7, поэтому мне нужно перенаправить http://mydomain.com/blog/blahblah/ на http://mydomain.com/blahblah/
Я добавил в wordpress web.config
<rule name="rewrite /blog/">
<match url="^/blog/([_0-9a-z-]+)/" />
<conditions>
</conditions>
<action type="Rewrite" url="/{R:1}/" />
</rule>
так что web.config теперь содержит:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="wordpress" patternSyntax="Wildcard">
<match url="*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
<rule name="rewrite /blog/">
<match url="^/blog/([_0-9a-z-]+)/" />
<conditions>
</conditions>
<action type="Rewrite" url="/{R:1}/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Wordpress продолжает работать, но / blog / не перенаправляется. Зачем?
1 ответ
Решение
1) Лучше переместить это правило выше правила подстановочного знака
2) у вас был ведущий слеш ^/blog/...
-- тебе это не нужно: ^blog/...
3) Поскольку никакие условия не использовались, я также удалил <conditions></conditions>
<rule name="rewrite /blog/">
<match url="^blog/([_0-9a-zA-Z\-]+)/$"/>
<action type="Rewrite" url="/{R:1}/"/>
</rule>
Выше приведено правило перезаписи - вы видите тот же URL в браузере, но за ним выполняется по-разному.
Если вы хотите Redirect, используйте следующее:
<rule name="rewrite /blog/">
<match url="^blog/([_0-9a-zA-Z\-]+)/$"/>
<action type="Redirect" url="/{R:1}/" redirectType="Permanent" />
</rule>