我想创建一个网址重写规则,在没有网址的网址上添加/
,例如:
www.domain.com/news/latest
将被重定向到www.domain.com/news/latest/
以下规则就是这样,但我遇到的问题有两个:
此重写规则适用于图片文件等内容。
所以例如domain.com/globalassets/icons/image.svg
变为domain.com/globalassets/icons/image.svg/
导致404文件没有发生,这很奇怪,可能是因为我在MVC中使用RegisterBundles
方法添加它们?
这是一个使用CMS(episerver)的基于ASP.NET MVC的网站,所以我想忽略管理区域中的任何重定向,所以我添加了第二条规则,但是再次将其添加到CSS和图像中断管理区域。
这是我到目前为止所做的,有人可以帮助我使这条规则正常工作吗?
<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>
答案 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>