2010-02-13 363 views
22

我在根据查询字符串参数重定向到另一个URL时遇到了一些问题。我想这重定向进入www.domain.com/signup.aspx?p=1用户:当他们进入IIS URL重写模块:基于查询字符串重定向

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

回答

28

看看这工作好一点:

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

感谢它的工作! – 2010-02-14 11:41:11

+1

这对我有用,并为我节省了一天 - 谢谢 – Bala 2013-12-02 06:04:55

36

使用值来选择目的地的更强大的方法是使用重写地图。该地图本质上是查找表。这不需要每条新路径都有新的规则(以及针对每个请求的模式的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映射的值。