我的web.config中有以下重写规则。规范规则有效,但小写规则不起作用。
我正试图像这样测试:www.mysite.com/UPPERCASE。我原本希望将网址转换为www.mysite.com/uppercase,但它保持大写。我做错了什么?
<rewrite xdt:Transform="Insert">
<rules>
<rule name="LowerCaseRule" patternSyntax="ExactMatch">
<match url="[A-Z]" ignoreCase="false"/>
<action type="Redirect" url="{ToLower:{URL}}"/>
</rule>
<rule name="CanonicalHostName">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^www.mysite.com$" negate="true" />
</conditions>
<action type="Redirect" url="{MapSSL:{HTTPS}}www.mysite.com/{R:1}" redirectType="Permanent" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="MapSSL" defaultValue="OFF">
<add key="ON" value="https://" />
<add key="OFF" value="http://" />
</rewriteMap>
</rewriteMaps>
</rewrite>
答案 0 :(得分:3)
您应该从规则patternSyntax="ExactMatch"
中删除LowerCaseRule
,因为在您的情况下,您希望使用正则表达式系统(默认情况下或通过设置patternSyntax="ECMAScript"
)。
所以你的规则应该是:
<rule name="LowerCaseRule">
<match url="[A-Z]" ignoreCase="false"/>
<action type="Redirect" url="{ToLower:{URL}}"/>
</rule>
答案 1 :(得分:0)
试试这个
<rule name="LowerCaseRule" stopProcessing="true">
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{URL}" pattern=".*[A-Z].*" ignoreCase="false" />
</conditions>
<action type="Redirect" url="{ToLower:{URL}}" />
</rule>
答案 2 :(得分:0)
这对我来说更好。我注意到当您有{URL}
这样的路径时,cassete.axd/scripts/myscript.js?xxx
无法正确解析,而是会重定向到cassette.axd?xxx
。
<rule name="LowerCaseRule - HTTPS">
<match url="[A-Z]" ignoreCase="false"/>
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true"/>
</conditions>
<action type="Redirect" url="https://{ToLower:{HTTP_HOST}}{ToLower:{PATH_INFO}}" appendQueryString="true"/>
</rule>
<rule name="LowerCaseRule - HTTP">
<match url="[A-Z]" ignoreCase="false"/>
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true"/>
</conditions>
<action type="Redirect" url="http://{ToLower:{HTTP_HOST}}{ToLower:{PATH_INFO}}" appendQueryString="true"/>
</rule>
希望这有助于某人。