IIS URL重写模块:基于查询字符串的重定向

IIS URL重写模块:基于查询字符串的重定向,iis,iis-7,url-rewriting,url-rewrite-module,Iis,Iis 7,Url Rewriting,Url Rewrite Module,我在基于查询字符串参数重定向到另一个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" /> &

我在基于查询字符串参数重定向到另一个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


Martijn

看看这是否更有效:

<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>

使用值选择目的地的更可靠方法是使用重写映射。该映射本质上是一个查找表。对于每个新路径,这不需要新规则(以及针对每个请求的模式对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}}是在注册映射中查找{C:1}的指令
  • {C:2}是对第二个条件匹配的反向引用:来自注册映射的值