2012-01-06 11 views
7

Belirli bir çerezde bir değer yakalayan IIS 7.5 web sitem için bir URL Yeniden Yazma kuralı yazmalı ve bu değeri bir URL oluşturmak için kullanmalıyım. Örneğin, gelen istekler şöyle görünür:URL kullanarak bir Çerezde Değer Yakalama IIS7 için Yeniden Yazma

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

fter belgeleri inceledikten ve arama:

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 

I ("foo" çerez değerine bağlı olarak) bu rota onları istiyorum örnekler için, ben güldüm! Yardım ettiğin için teşekkür ederim.

cevap

9

Kendi sorumu yanıtlarken, işte çalışan bir örnek. Desenin hangi karakterlerin desteklenmesini gerektirdiğine bağlı olarak ek çalışmaya ihtiyacı olabilir, ancak aşağıdaki kural keşfedilen çerez değerini ve keşfedilen sunucuya giden yolu kullanacaktır ve sunucu IPv4 adresi veya ad (alfasayısal ve dönem) ile belirtilebilir.).

<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

Modelin olası bir çerez değeriyle eşleşmesini sağlamak için pattern = "foo = [^;] *" 'özelliğini kullanmanızı öneririm - deseniniz çok kısıtlayıcı. "Bu dizgi, noktalı virgül, virgül ve beyaz boşluk hariç karakter dizisidir" yazan Netscape.com'un orijinal özelliğine bakın (http://curl.haxx.se/rfc/cookie_spec.html). herhangi bir kodlama tanımlanmasına veya gerekli olmasına rağmen, bu tür verileri isim veya değer içine koyma ihtiyacı,% XX kodlama URL stili gibi bazı kodlama yöntemleri önerilir. " 'Pattern = "foo = [^;, \ s] *" ' – ErikE

+0

@Geoffrey ile tam anlamıyla alabiliyorsunuz. Benzer bir alanda sorun yaşıyorum - Buna cevap verebilir misiniz? - http://stackoverflow.com/questions/34506551/reading-cookie-value-using-url-rewrite-for-iis-wizard-unable-to-validate-at – codetoshare

1

@Geoffrey herhangi çerez değerini dönen kod desteğini sağlamak için, bu desen öneriyoruz: Bir hatırlatma olarak

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

, {HTTP_COOKIE} değeri örneğin aşağıdaki gibidir:

Çerez: foo = myexamplevalue; expires = Çar, 03-Mayıs-2014 22:31:08 GMT; yol = /; HttpOnly \ r \ n

+0

Orijinal olarak regex'inizi düzeltmek için yorum yazdım, bulmaya geldim dışarı, '' '' '' 'açgözlü yapar. Aferin. Olumsuz olarak karakter sınıflarını tercih etsem de (belki de iyelik değiştirici + verildiğinde). – ErikE