Url重写为小写不起作用

时间:2013-09-12 10:16:59

标签: asp.net url-rewriting web-config

我的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>

3 个答案:

答案 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>

希望这有助于某人。