2010-02-13 5 views
22

Ho alcuni problemi con il reindirizzamento a un altro URL in base ai parametri della stringa di query. Voglio reindirizzare gli utenti che entrano www.domain.com/signup.aspx?p=1 a:Modulo di riscrittura dell'URL IIS: reindirizzamento basato su 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> 

Ora quando entrano www.domain.com/ signup.aspx p = 2 si deve andare a:?

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> 

Le regole di cui sopra non funzionano. Qual è il modo giusto per farlo? Grazie in anticipo.

Gr

Martijn

risposta

28

vedere se questo funziona un po 'meglio:

<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

Grazie ha funzionato! –

+1

Questo ha funzionato per me, e mi ha salvato giorno - Grazie – Bala

36

Un metodo più affidabile di utilizzare un valore per selezionare una destinazione è quello di utilizzare Maps riscrittura. La mappa è essenzialmente una tabella di ricerca. Questo non richiede una nuova regola (e una valutazione aggiuntiva dell'URL su un modello su ogni richiesta) per ogni nuovo percorso.

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

Definizioni:

  • {C: 1} è un backreference alla prima condizione di corrispondenza: il valore di stringa di query.
  • {iscrizioni: {C: 1}} è un'istruzione per cercare {C: 1} nella mappa di Iscrizioni.
  • {C: 2} è un riferimento alla seconda condizione: il valore della mappa di iscrizioni.