为什么我的IIS 7重写规则不起作用?

问题描述

| 我已经将Linux下的wordpress Mu博客迁移到IIS 7下的WP 3,因此我需要将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)最好将此规则移至通配符规则之上 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,但后面的执行方式不同。 如果要重定向,请使用以下命令:
<rule name=\"rewrite /blog/\">
    <match url=\"^blog/([_0-9a-zA-Z\\-]+)/$\"/>
    <action type=\"Redirect\" url=\"/{R:1}/\" redirectType=\"Permanent\" />
</rule>