URL重写以更改查询字符串大小写

时间:2013-11-16 12:39:12

标签: asp.net url-rewriting rewrite url-rewrite-module

我希望在我的web.config中设置一个URL重写规则,该规则将修改以下URL:

/detail.aspx?aID=164&mode=t

To(见aid的情况):

/detail.aspx?aid=164&mode=t

有人可以帮助我吗?这里唯一要提到的是,如果最后没有mode参数,并且无论aid参数在查询字符串中出现的顺序如何,规则仍然有用。

编辑1

我找到了这个指南,它将整个URL重写为小写。这对我有用,只有接受的解决方案似乎忽略了查询字符串值。

How to display URL in lower case?

编辑2

我现在使用以下内容在找到大写字符时发出301重定向。接受的答案解决了原始问题,但此解决方案适用于完整的URI,域,路径和查询字符串。

        '301 REDIRECT ON UPPERCASE URIS
        Dim fullUri As String = Request.Url.AbsoluteUri
        If fullUri.Any(Function(c) Char.IsUpper(c)) Then
            Response.RedirectPermanent(fullUri.ToLower)
        End If

1 个答案:

答案 0 :(得分:2)

编辑: 你是对的,没有意识到它是同一页。 你需要添加另一个条件。

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

示例:

/detail.aspx?aID=164&mode=t 转换为 /detail.aspx?aid=164&mode=t

由于第二条规则,

和/detail.aspx?aid=164&mode=t被忽略。