我有一个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
如何修改上述规则以包含查询字符串?
答案 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没有此问题)。