IIS URL 重写规则 - 排除所有文件和特定路径
IIS URL Rewriting rule - exclude ALL files and a specific path
我想创建一个 URL 重写规则,在没有 URL 的 /
上添加 /
例如:
www.domain.com/news/latest
将被重定向到 www.domain.com/news/latest/
下面的规则正是这样做的,但我遇到的问题有两个:
此重写规则正在应用于图像文件等内容。
因此,例如 domain.com/globalassets/icons/image.svg
更改为 domain.com/globalassets/icons/image.svg/
导致 404 它不会发生在 CSS 文件中,这很奇怪,也许是因为我在 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>
IIS 的常见 SEO 重写规则是 documented here。
特别是,使用 尾部斜杠 规则时,您缺少 logicalGrouping="MatchAll"
attribute:
Conditions are defined within a <conditions>
collection of a rewrite rule. This collection has an attribute called logicalGrouping
that controls how conditions are evaluated. If a rule has conditions, then the rule action is performed only if rule pattern is matched and:
- All conditions were evaluated as true, provided that logicalGrouping="MatchAll" was used.
- At least one of the conditions was evaluated as true, provided that logicalGrouping="MatchAny" was used.
如果没有此设置,它会在您的文件名中添加一个尾部斜线,因为当您的否定规则 any 匹配而不是 all[= 时它匹配其中 31=]。
上面 link 的整个 尾部斜线 规则是:
<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>
我想创建一个 URL 重写规则,在没有 URL 的 /
上添加 /
例如:
www.domain.com/news/latest
将被重定向到 www.domain.com/news/latest/
下面的规则正是这样做的,但我遇到的问题有两个:
此重写规则正在应用于图像文件等内容。 因此,例如
domain.com/globalassets/icons/image.svg
更改为domain.com/globalassets/icons/image.svg/
导致 404 它不会发生在 CSS 文件中,这很奇怪,也许是因为我在 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>
IIS 的常见 SEO 重写规则是 documented here。
特别是,使用 尾部斜杠 规则时,您缺少 logicalGrouping="MatchAll"
attribute:
Conditions are defined within a
<conditions>
collection of a rewrite rule. This collection has an attribute calledlogicalGrouping
that controls how conditions are evaluated. If a rule has conditions, then the rule action is performed only if rule pattern is matched and:
- All conditions were evaluated as true, provided that logicalGrouping="MatchAll" was used.
- At least one of the conditions was evaluated as true, provided that logicalGrouping="MatchAny" was used.
如果没有此设置,它会在您的文件名中添加一个尾部斜线,因为当您的否定规则 any 匹配而不是 all[= 时它匹配其中 31=]。
上面 link 的整个 尾部斜线 规则是:
<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>