2010-02-13 12 views
22

Mam pewne problemy z przekierowaniem na inny adres URL na podstawie parametrów ciągu zapytania. Chcę przekierować użytkowników, które wchodzą www.domain.com/signup.aspx?p=1 do:Moduł przepisywania URL-ów IIS: Przekierowanie oparte na 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> 

Teraz kiedy wejdą www.domain.com/ signup.aspx p = 2, musi udać się do:

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> 

Powyższe zasady nie działają. Jaki jest właściwy sposób na zrobienie tego? Z góry dziękuję.

Gr

Martijn

Odpowiedz

28

sprawdzić, czy to działa nieco lepiej:

<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

Dzięki temu zadziałało! –

+1

To zadziałało dla mnie i uratowało mnie dzień - dziękuję – Bala

36

Bardziej wytrzymałe metoda używając wartości, aby wybrać miejsce docelowe jest użycie przepisać Mapy. Mapa jest w zasadzie tabelą odnośników. Nie wymaga to nowej reguły (i dodatkowej oceny adresu URL względem wzorca przy każdym żądaniu) dla każdej nowej ścieżki.

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

Definicje:

  • C {1} jest wsteczne do pierwszego stanu meczu: wartość ciągu zapytania.
  • {Rejestracja: {C: 1}} to instrukcja wyszukiwania {C: 1} na mapie rejestracji.
  • {C: 2} jest odsyłaczem wstecznym do drugiego warunku: wartość z mapy rejestracji.
Powiązane problemy