2010-02-13 25 views
22

Tôi gặp một số vấn đề khi chuyển hướng đến một URL khác dựa trên các tham số chuỗi truy vấn. Tôi muốn chuyển hướng người dùng mà nhập www.domain.com/signup.aspx?p=1 tới:Mô-đun Rewrite URL IIS: Chuyển hướng Dựa trên QueryString

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> 

Bây giờ khi họ bước vào www.domain.com/ signup.aspx p = 2 thì phải đi đến:

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> 

Các quy tắc trên không có tác dụng. Cách đúng để làm điều này là gì? Cảm ơn trước.

Gr

Martijn

Trả lời

28

Xem nếu điều này làm việc tốt hơn một chút:

<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

Cảm ơn! –

+1

Điều này làm việc cho tôi và đã cứu tôi - Cảm ơn bạn – Bala

36

Một phương pháp mạnh mẽ hơn của việc sử dụng một giá trị để chọn một điểm đến là sử dụng Rewrite Maps. Bản đồ về bản chất là một bảng tra cứu. Điều này không yêu cầu quy tắc mới (và đánh giá bổ sung URL đối với mẫu trên mọi yêu cầu) cho mỗi đường dẫn mới.

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

Định nghĩa:

  • {C: 1} là một backreference để là người đầu tiên trận đấu tình trạng: truy vấn chuỗi giá trị.
  • {Đăng ký: {C: 1}} là hướng dẫn tra cứu {C: 1} trong bản đồ Đăng ký.
  • {C: 2} là sự phản đối cho điều kiện thứ hai khớp: giá trị từ bản đồ Đăng ký.
Các vấn đề liên quan