2012-01-06 14 views
7

Necesito escribir una regla de reescritura de URL para mi sitio web IIS 7.5 que captura un valor en una cookie en particular y luego usa ese valor para construir una URL. Por ejemplo, las solicitudes de entrada se ve así:Captura de un valor en una cookie usando Reescritura de URL para IIS7

GET http://myserver.com/test.aspx HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Accept-Language: en-US 
User-Agent: Mozilla/5.0 
Host: myserver.com 
Cookie: foo=bar; bat=bar 

me gustaría a ellos ruta a (basado en el valor de la cookie "foo"):

http://myserver.com/bar/test.aspx 

espués de la revisión de la documentación y búsqueda por ejemplo, estoy perplejo! Gracias por tu ayuda.

Respuesta

9

Respondiendo a mi propia pregunta, he aquí un ejemplo de trabajo. El patrón puede necesitar trabajo adicional dependiendo de qué caracteres requieren soporte, pero la siguiente regla usará el valor de la cookie descubierta y la ruta al servidor descubierto, y el servidor se puede especificar por dirección IPv4 o por nombre (alfanumérico y período))

<rule name="Route Base On Cookie" stopProcessing="true"> 
    <match url="^(.*)" /> 
    <conditions> 
     <add input="{HTTP_COOKIE}" pattern="foo=([0-9.a-zA-Z]+)" /> 
    </conditions> 
    <action type="Rewrite" url="http://{C:1}/{R:0}" /> 
</rule> 
+0

Recomiendo 'pattern =" foo = [^;] * "' para que el patrón coincida con cualquier posible valor de cookie; su patrón es demasiado restrictivo. Consulte [la especificación original de Netscape.com] (http://curl.haxx.se/rfc/cookie_spec.html) que dice "esta cadena es una secuencia de caracteres que excluye punto y coma, coma y espacio en blanco. la necesidad de colocar dichos datos en el nombre o valor, se recomienda algún método de codificación, como la codificación de estilo URL% XX, aunque no se define ni requiere ninguna codificación. " Podrías tomarlo literalmente con 'pattern =" foo = [^;, \ s] * "' – ErikE

+0

@Geoffrey - Estoy enfrentando un problema en un área similar - ¿Puedes responder esto? - http://stackoverflow.com/questions/34506551/reading-cookie-value-using-url-rewrite-for-iis-wizard-unable-to-validate-at – codetoshare

1

@Geoffrey Para hacer su soporte de códigos de devolver cualquier valor de la cookie, me gustaría recomendar este patrón:

<add input="{HTTP_COOKIE}" pattern="foo=(.*?);" /> 

Como recordatorio, el {} HTTP_COOKIE valor se ve así por ejemplo:

Cookie: foo = myexamplevalue; expira = mié, 03-may-2014 22:31:08 GMT; ruta = /; HttpOnly \ r \ n

+0

Comenté originalmente para corregir tu expresión regular, ven a buscar fuera, el '?' hace que el '*' no sea codicioso. Bien hecho. Aunque prefiero las clases de personajes negadas ya que son potencialmente más rápidas (especialmente cuando se les da el modificador posesivo '+'). – ErikE

Cuestiones relacionadas