IIS URL 重写模块:基于 QueryString 的重定向

Posted

技术标签:

【中文标题】IIS URL 重写模块:基于 QueryString 的重定向【英文标题】:IIS URL Rewrite Module : Redirect Based On QueryString 【发布时间】:2011-01-16 11:26:03 【问题描述】:

我在根据查询字符串参数重定向到另一个 URL 时遇到一些问题。我想将输入 www.domain.com/signup.aspx?p=1 的用户重定向到:

www.domain.com/signup

<rule name="Signup Redirect 1" stopProcessing="true">
  <match url="signup\.aspx\?p=1" />
  <conditions logicalGrouping="MatchAll" />
  <action type="Redirect" url="signup" redirectType="Temporary" />
</rule>

现在,当他们进入 www.domain.com/signup.aspx?p=2 时,他们必须访问:

www.domain.com/signup/promocode

<rule name="Signup Redirect 2" stopProcessing="true">
  <match url="signup\.aspx\?p=2" />
  <conditions logicalGrouping="MatchAll" />
  <action type="Redirect" url="signup/promocode" redirectType="Temporary" />
</rule>

上述规则不起作用。这样做的正确方法是什么?提前致谢。

Gr

马丁

【问题讨论】:

【参考方案1】:

看看这是否效果更好:

<rule name="Signup Redirect 1" stopProcessing="true">
  <match url="signup\.aspx$" />
  <conditions>
    <add input="QUERY_STRING" pattern="p=1" />
  </conditions>
  <action type="Redirect" url="signup" redirectType="Temporary" />
</rule>

<rule name="Signup Redirect 2" stopProcessing="true">
  <match url="signup\.aspx$" />
  <conditions>
    <add input="QUERY_STRING" pattern="p=2" />
  </conditions>
  <action type="Redirect" url="signup/promocode" redirectType="Temporary" />
</rule>

【讨论】:

【参考方案2】:

使用值来选择目的地的更可靠的方法是使用重写映射。地图本质上是一个查找表。这不需要为每个新路径制定新规则(以及针对每个请求的模式对 URL 进行额外评估)。

<rules>
  <rule name="Signup Redirect Map" stopProcessing="true">
    <match url="^signup\.aspx$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
      <add input="QUERY_STRING" pattern="p=([^&amp;]+)" />
      <add input="Signups:C:1" pattern="(.+)" />
    </conditions>
    <action type="Redirect" url="C:2" redirectType="Temporary" />
  </rule>
</rules>
<rewriteMaps>
  <rewriteMap name="Signups">
    <add key="1" value="signup" />
    <add key="2" value="signup/promocode" />
    <add key="3" value="signup/newcode" />
    <add key="n" value="signup/futureproof" />
  </rewriteMap>
</rewriteMaps>

定义:

C:1 是对第一个条件匹配的反向引用:查询字符串值。 Signups:C:1 是在 Signups 映射中查找 C:1 的指令。 C:2 是对第二个条件匹配的反向引用:Signups 映射中的值。

【讨论】:

以上是关于IIS URL 重写模块:基于 QueryString 的重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何配置iis rewrite模块的url重写规则

使用 IIS 7 重写模块重写 & 符号 URL

带有 URL 重写模块的 IIS 7.5 在回发时将 QueryString 参数加倍

IIS URL 将模块 url 重写为小写

iis重写模块实现程序自动二级域名,微软提供的URL重写2.0版本适用IIS以上

路由与 URL 重写 (IIS7) 性能