我无法制定一个规则,可以捕获{URL}
和{QUERY_STRING}
,并且还按照我希望的方式显示url。所以,我把它分成两个规则。
网址为小写
<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>
URL查询字符串为小写
<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方法忽略请求。如果没有这个规则,那么指定大写url的POST会因为301而丢失数据(GETs没有这个问题)。
虽然它可能不是问题,你不应该小心吗?你是否100%确定这个案例在你的querystrings中并不重要? –
经过一番搜索这个http://stackoverflow.com/questions/20018553/url-rewrite-to-change-querystring-case可能会帮助你? – Damon
@Bartdude重要吗?你能否详细说明。 – CuriousDev