IIS URL重写规则 - 排除所有文件和特定路径

时间:2018-03-20 14:54:28

标签: asp.net-mvc url-rewriting iis-7.5 url-rewrite-module

我想创建一个网址重写规则,在没有网址的网址上添加/,例如:

www.domain.com/news/latest将被重定向到www.domain.com/news/latest/

以下规则就是这样,但我遇到的问题有两个:

  1. 此重写规则适用于图片文件等内容。 所以例如domain.com/globalassets/icons/image.svg变为domain.com/globalassets/icons/image.svg/导致404文件没有发生,这很奇怪,可能是因为我在MVC中使用RegisterBundles方法添加它们?

  2. 这是一个使用CMS(episerver)的基于ASP.NET MVC的网站,所以我想忽略管理区域中的任何重定向,所以我添加了第二条规则,但是再次将其添加到CSS和图像中断管理区域。

  3. 这是我到目前为止所做的,有人可以帮助我使这条规则正常工作吗?

    <rewrite>
        <rules>
    
          <rule name="Exclude Slash Episerver " stopProcessing="true">
            <match url="^episerver/" />
            <action type="None" />
          </rule>
    
          <rule name="Add trailing slash" stopProcessing="true">
            <match url="(.*[^/])$" />
            <conditions>
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="{R:1}/" />
          </rule>
    
        </rules>
    </rewrite>
    

1 个答案:

答案 0 :(得分:0)

IIS的常见SEO重写规则是documented here

特别是,使用 Trailing Slash 规则,您错过了logicalGrouping="MatchAll" attribute

  

条件在重写规则的<conditions>集合中定义。此集合具有一个名为logicalGrouping的属性,用于控制条件的评估方式。如果规则具有条件,则仅在匹配规则模式时执行规则操作:

     
      
  • 如果使用 logicalGrouping =&#34; MatchAll&#34; ,则所有条件都评为true。
  •   
  • 如果使用 logicalGrouping =&#34; MatchAny&#34; ,则至少有一个条件被评估为true。
  •   

如果没有此设置,它会在您的文件名中添加一个尾部斜杠,因为当任何的否定规则匹配而不是所有时,它匹配。

上述链接中的整个 Trailing Slash 规则是:

<rule name="Trailing Slash" stopProcessing="true"> 
    <match url="(.*[^/])$" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{URL}" pattern="WebResource.axd" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="{R:1}/" /> 
</rule>