2013-11-28 157 views
0

我有一个IIS重写规则将所有网址的小写IIS重写规则为小写的URL

<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

虽然它可能不是问题,你不应该小心吗?你是否100%确定这个案例在你的querystrings中并不重要? –

+0

经过一番搜索这个http://stackoverflow.com/questions/20018553/url-rewrite-to-change-querystring-case可能会帮助你? – Damon

+0

@Bartdude重要吗?你能否详细说明。 – CuriousDev

回答

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 ,所以我无法检查语法是否正确!可能需要调整一下...

+0

感谢您的帮助 – CuriousDev

0

我无法制定一个规则,可以捕获{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没有这个问题)。