【问题标题】:IIS URL Rewrite Module : Redirect Based On QueryStringIIS URL 重写模块:基于 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

马丁

【问题讨论】:

    标签: iis iis-7 url-rewriting url-rewrite-module


    【解决方案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 映射中的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-11
        • 2011-12-25
        • 2011-12-04
        • 2012-06-01
        • 2023-03-04
        相关资源
        最近更新 更多