2011-09-23 85 views
2

我:ASP.net URL重写力小写

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

彼尔姆重定向只是301重定向到新的URL。

此规则旨在将任何带有大写char的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

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

像这样的东西可能会奏效(未测试):

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

它使用一个超前规则,以检查是否“ashx的”是URL的一部分,如果URL是大写的。如果是,它会重定向到同一网址的小写版本。

+0

Ahhhh谢谢!该循环是由重定向到大写permredirect文件 –

+0

Arg仍然不工作:(为什么我需要排除ASHX文件?我只是想要一个通用的规则重定向到任何大写的URL到小写 –