2010-02-13 144 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映射的值。