web.config重写以重定向html文件但排除某些文件夹

时间:2014-02-04 12:10:31

标签: regex web-config url-rewrite-module

我正在尝试创建一个重写规则,将所有.html页面重定向到一个不包括单个文件夹(以及所有子文件夹)的URL。我做了很多googleing并试图在类似的情况下拼凑一些东西。

原始重写规则适用于重定向所有html文件,但我正在尝试将先前的规则放入以在文件夹匹配时停止处理。

我开始使用它

<rewrite>
  <rules>
    <rule name="redirect legacy html" enabled="true" stopProcessing="true">
      <match url="(.+).html$" ignoreCase="true" />
      <conditions>
        <add input="{QUERY_STRING}" pattern="^$" ignoreCase="false" />
      </conditions>
      <action type="Redirect" redirectType="Permanent" url="http://www.example.com" />
    </rule>
  </rules>
</rewrite>

然后我添加了一个单独的规则,希望第一个停止处理,重定向不会发生

<rewrite>
  <rules>
    <rule name="ignore redirects in admin" enabled="true" stopProcessing="true">
      <match url="/script|admn/(.+).html$" ignoreCase="true" />
      <action type="None" />
    </rule>
    <rule name="redirect legacy html" enabled="true" stopProcessing="true">
      <match url="(.+).html$" ignoreCase="true" />
      <conditions>
        <add input="{QUERY_STRING}" pattern="^$" ignoreCase="false" />
      </conditions>
      <action type="Redirect" redirectType="Permanent" url="http://www.example.com" />
    </rule>
  </rules>
</rewrite>

这继续将所有html文件重定向到www.example.com。

然后我继续尝试使用条件排除某些目录,如下所示

<rewrite>
  <rules>
    <rule name="redirect legacy html" enabled="true" stopProcessing="true">
      <match url="(.+).html$" ignoreCase="true" />
      <conditions>
        <add input="{REQUEST_URI}" pattern="/(scripts|admn)/.*" ignoreCase="true" negate="true" />
      </conditions>
      <action type="Redirect" redirectType="Permanent" url="http://www.example.com" />
    </rule>
  </rules>
</rewrite>

但这也不起作用 - 重定向仍然发生

我一直在使用RegExr尽可能地测试我的各种正则表达式,但我没有太多运气。我不知道这是一个RegEx问题还是重写问题。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:8)

我设法使用以下

来解决它
<rewrite>
  <rules>
    <rule name="redirect legacy html" enabled="true" stopProcessing="true">
      <match url="(.+).html$" ignoreCase="true" />
      <conditions>
        <add input="{QUERY_STRING}" pattern="^$" ignoreCase="false" />
        <add input="{REQUEST_URI}" pattern="^/(scripts|admin)" ignoreCase="true" negate="true" />
      </conditions>
      <action type="Redirect" redirectType="Permanent" url="http://www.example.com" />
    </rule>
  </rules>
</rewrite>

这是我已经尝试过的组合。也许这将有助于其他人。