2010-02-13 8 views
22

Ich habe einige Probleme mit der Umleitung zu einer anderen URL basierend auf den Abfragezeichenfolgen-Parametern. Ich möchte Benutzer umleiten, die www.domain.com/signup.aspx?p=1 eingeben:IIS-URL-Rewrite-Modul: Umleiten basierend auf 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> 

Jetzt, wenn sie betreten www.domain.com/ signup.aspx p = 2 sie gehen müssen:

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> 

Die oben genannten Regeln nicht funktionieren. Was ist der richtige Weg? Danke im Voraus.

Gr

Martijn

Antwort

28

Sehen Sie, wenn dies ein wenig besser funktioniert:

<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

Danke, es hat funktioniert! –

+1

Das hat für mich funktioniert und mir den Tag gerettet - Danke – Bala

36

Ein robusteres Verfahren einen Wert von unter Verwendung eines Ziel auszuwählen ist Rewrite Karte anzusehen. Die Karte ist im Wesentlichen eine Nachschlagetabelle. Dies erfordert keine neue Regel (und eine zusätzliche Bewertung der URL gegen ein Muster bei jeder Anfrage) für jeden neuen Pfad.

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

Definitionen:

  • {C: 1} eine Rückreferenzierung zur ersten Bedingung entsprechen: Die Abfrage Zeichenfolge.
  • {Anmeldungen: {C: 1}} ist eine Anweisung zum Nachschlagen von {C: 1} in der Signups-Map.
  • {C: 2} ist eine Rückreferenz für die Übereinstimmung der zweiten Bedingung: der Wert aus der Karte "Signups".