IIS重写小写URL的规则

时间:2013-11-28 13:21:23

标签: asp.net iis url-rewriting

我有一个IIS重写规则将所有网址转换为小写

<rewrite>
    <rules>
        <rule name="LowerCaseRule1" stopProcessing="true">
            <match url="[A-Z]" ignoreCase="false" />
            <action type="Redirect" url="{ToLower:{URL}}" />
        </rule>
    </rules>
</rewrite>

但是它只将url的一部分转换为小写,并且不转换查询字符串。例如,ID未转换为id

http://www.itsmysitesitesite.com/showproduct.aspx?ID=230

如何修改上述规则以包含查询字符串?

2 个答案:

答案 0 :(得分:0)

根据我的评论(引用this问题)我会想象规则看起来像这样:

<rule name="URL Lower" enabled="true" stopProcessing="true">
      <match url="[A-Z]" ignoreCase="false" />                        
      <conditions trackAllCaptures="true">
          <add input="{QUERY_STRING}" pattern="(.*)" />
          <add input="{QUERY_STRING}" pattern="([A-Z]+)" ignoreCase="false" />
      </conditions>
      <action type="Redirect" url="{ToLower:{URL}}{ToLower:{C:1}}" appendQueryString="false" />
 </rule>

虽然免责声明,我正在使用Windows XP,所以我只有IIS 6.0,所以我无法检查语法是否正确!可能需要一些调整......

答案 1 :(得分:0)

我无法制作一条既可以捕获{URL}又可以{QUERY_STRING}的规则,也可以按照我想要的方式显示网址。所以,我把它分成两个规则。

小写的网址

<rule name="UrlToLowercase" stopProcessing="true">
  <match url=".*[A-Z].*" ignoreCase="false" />
    <conditions>                          
      <add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" />
      <add input="{URL}" pattern="^.*\.(axd|css|js|jpg|jpeg|png|gif|txt|xml|svg|pdf)$" negate="true" ignoreCase="true" /> 
    </conditions>
    <action type="Redirect" redirectType="Permanent" url="{ToLower:{URL}}" />
</rule> 

查询字符串为小写的网址

<rule name="UrlWithQueryStringToLowercase" stopProcessing="true">
  <match url="(.*)" ignoreCase="false" />
    <conditions trackAllCaptures="true">   
      <add input="{QUERY_STRING}" pattern="(.*)" /> 
      <add input="{QUERY_STRING}" pattern=".*[A-Z].*" ignoreCase="false" />
      <add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" />
    </conditions>
    <action type="Redirect" redirectType="Permanent" url="{ToLower:{URL}}?{ToLower:{C:0}}" appendQueryString="false" />
</rule>

这应涵盖所有情况,如果不是,请告诉我。 :)

我添加了一些您可能想留下或取出的额外条件。

<add input="{URL}" pattern="^.*\.(axd|css|js|jpg|jpeg|png|gif|txt|xml|svg|pdf)$" negate="true" ignoreCase="true" />忽略以axd,css,js,jpg等结尾的路径。如果没有此规则,您将无法从服务器加载带有大写字母的文件。

<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" />将使用POST方法忽略请求。如果没有此规则,指定大写网址的POST将因301而丢失数据(GET没有此问题)。