2010-02-13 6 views
22

J'ai des problèmes de redirection vers une autre URL en fonction des paramètres de la chaîne de requête. Je veux rediriger les utilisateurs qui entrent www.domain.com/signup.aspx?p=1 à:Module de réécriture d'URL IIS: Redirection basée sur 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> 

Maintenant, quand ils entrent dans www.domain.com/ signup.aspx p = 2, ils doivent aller à:

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> 

Les règles ci-dessus ne fonctionnent pas. Quel est le bon moyen de le faire? Merci d'avance.

Gr

Martijn

Répondre

28

Voir si cela fonctionne un peu mieux:

<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

Merci cela a fonctionné! –

+1

Cela a fonctionné pour moi, et m'a sauvé la journée - Merci – Bala

36

Une méthode plus robuste d'utiliser une valeur pour sélectionner une destination est d'utiliser des cartes Réécriture. La carte est essentiellement une table de recherche. Cela ne nécessite pas une nouvelle règle (et une évaluation supplémentaire de l'URL par rapport à un modèle sur chaque requête) pour chaque nouveau chemin.

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

Définitions:

  • {C: 1} est une référence arrière à la première partie de condition: la valeur de chaîne de requête.
  • {Signups: {C: 1}} est une instruction pour rechercher {C: 1} dans la carte Signups.
  • {C: 2} est une référence arrière à la deuxième correspondance de condition: la valeur de la carte Signups.
Questions connexes