2010-02-13 34 views
22

Tengo algunos problemas con la redirección a otra URL en función de los parámetros de cadena de consulta. Quiero redirigir a los usuarios que entran a www.domain.com/signup.aspx?p=1:Módulo de reescritura de URL de IIS: Redireccionamiento basado en 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> 

Ahora cuando entran www.domain.com/ signup.aspx p = 2 que debe ir 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> 

Las reglas anteriores no funcionan. ¿Cuál es la forma correcta de hacer esto? Gracias por adelantado.

Gr

Martijn

Respuesta

28

ver si esto funciona un poco mejor:

<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

¡Gracias funcionó! –

+1

Esto funcionó para mí, y me salvó el día - Gracias – Bala

36

Un método más robusto de la utilización de un valor para seleccionar un destino es el uso de reescritura Maps. El mapa es esencialmente una tabla de búsqueda. Esto no requiere una nueva regla (y una evaluación adicional de la URL contra un patrón en cada solicitud) para cada ruta nueva.

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

Definiciones:

  • {c: 1} es una referencia inversa a la primera condición de coincidencia: el valor cadena de consulta.
  • {Signups: {C: 1}} es una instrucción para buscar {C: 1} en el mapa de Signups.
  • {C: 2} es una retroreferencia a la segunda coincidencia de condición: el valor del mapa de Signups.
Cuestiones relacionadas