2012-01-06 3 views
7

Ho bisogno di scrivere una regola di riscrittura degli URL per il mio sito Web IIS 7.5 che acquisisce un valore in un determinato cookie e quindi utilizza tale valore per creare un URL. Per esempio, le richieste in arrivo aspetto:Acquisizione di un valore in un cookie mediante Riscritto URL per 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 

mi piacerebbe loro percorso migliore per raggiungere (in base al valore del cookie "foo"):

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

opo la revisione della documentazione e la ricerca per esempio, sono perplesso! Grazie per l'aiuto.

risposta

9

Rispondendo alla mia domanda, ecco un esempio funzionante. Il pattern potrebbe richiedere un lavoro aggiuntivo a seconda dei caratteri che richiedono il supporto, ma la regola seguente utilizzerà il valore del cookie scoperto e il percorso verso il server rilevato - e il server può essere specificato dall'indirizzo IPv4 o dal nome (alfanumerico e periodo).

<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

Raccomando 'pattern =" foo = [^;] * "' per far corrispondere il pattern a qualsiasi valore di cookie possibile - il pattern è troppo restrittivo. Vedi [le specifiche originali di Netscape.com] (http://curl.haxx.se/rfc/cookie_spec.html) che dice "questa stringa è una sequenza di caratteri che esclude il punto e virgola, la virgola e lo spazio bianco. una necessità di inserire tali dati nel nome o nel valore, si consiglia un metodo di codifica come la codifica dello stile URL% XX, sebbene non sia definita o richiesta alcuna codifica. " Puoi prenderlo letteralmente con 'pattern =" foo = [^;, \ s] * "' – ErikE

+0

@Geoffrey - Sto affrontando un problema in un'area simile - Puoi rispondere per favore? - http://stackoverflow.com/questions/34506551/reading-cookie-value-using-url-rewrite-for-iis-wizard-unable-to-validate-at – codetoshare

1

@Geoffrey Per rendere il vostro sostegno codice di restituire qualsiasi valore del cookie, vi consiglio questo schema:

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

Come promemoria, il valore {} HTTP_COOKIE assomiglia a questo, per esempio:

Cookie: foo = myexamplevalue; scade = Mer, 03-May-2014 22:31:08 GMT; percorso = /; HttpOnly \ r \ n

+0

Originariamente ho commentato per correggere la tua espressione regolare, vieni a trovarci fuori, il '?' rende il '*' non-goloso. Molto bene. Anche se preferisco le classi di caratteri negate perché sono potenzialmente più veloci (specialmente quando viene dato il modificatore possessivo '+'). – ErikE