ASP.net url重写强制小写

时间:2011-09-23 02:05:29

标签: asp.net regex url-rewriting

我有:

<!-- Force lowercase URLS -->
<rewrite url="~/(.*[A-Z]+.*)$" to="~/handlers/permredirect.ashx?URL=${lower($1)}" />

Perm重定向只需301重定向到新网址。

此规则旨在将带有大写字符的任何URL重定向到小写字母。

然而,这会创建一个重定向循环,任何想法为什么?到目前为止,唯一的规则是:

<rewriter>

    <!-- Remove Trailing Slash for all URLS-->
    <rewrite url="~/(.*)/($|\?(.*))" to="~/handlers/permredirect.ashx?URL=${lower($1)}$2" />

    <!-- Force lowercase-->
    <rewrite url="~/(.*[A-Z]+.*)$" to="~/handlers/permredirect.ashx?URL=${lower($1)}" />

    <rewrite url="~/construct2($|\?(.*))" to="~/construct2.aspx" processing="stop" />
</rewriter>

1 个答案:

答案 0 :(得分:1)

您可以修改正则表达式以排除.ashx文件(可能会非常复杂)或在此规则之前创建新规则,这将捕获指向ashx文件的URL并将它们重定向到字符串的小写版本。

这样的事情可能有效(未经测试):

<rewrite url="~/(?=(.*\.ashx.*))(.*[A-Z]+.*)" to="~/${lower($1)}" />

它使用先行规则来检查“.ashx”是否是网址的一部分,以及网址是否为大写。如果是,则重定向到同一URL的小写版本。