2012-01-06 26 views
7

Tôi cần viết quy tắc Ghi lại URL cho trang web IIS 7.5 của tôi để ghi lại giá trị trong một cookie cụ thể và sau đó sử dụng giá trị đó để tạo URL. Ví dụ, yêu cầu đến trông như thế này:Ghi lại giá trị trong Cookie bằng cách sử dụng URL Rewrite cho 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 

tôi muốn chuyển hướng họ này (dựa trên "foo" giá trị cookie):

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

fter xem xét các tài liệu và tìm kiếm ví dụ, tôi bị bối rối! Cảm ơn bạn đã giúp đỡ.

Trả lời

9

Trả lời câu hỏi của riêng tôi, đây là ví dụ hoạt động. Mẫu có thể cần thêm công việc phụ thuộc vào những ký tự yêu cầu hỗ trợ, nhưng quy tắc sau sẽ sử dụng giá trị cookie được tìm thấy và tuyến đường đến máy chủ được khám phá - và máy chủ có thể được chỉ định theo địa chỉ IPv4 hoặc theo tên (chữ và số và dấu chấm)).

<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

Tôi khuyên bạn nên 'pattern =" foo = [^;] * "' để làm cho mẫu phù hợp với bất kỳ giá trị cookie có thể nào - mẫu của bạn quá hạn chế. Xem [thông số gốc từ Netscape.com] (http://curl.haxx.se/rfc/cookie_spec.html) cho biết "chuỗi này là một chuỗi ký tự không bao gồm dấu chấm phẩy, dấu phẩy và khoảng trắng. Nếu có cần phải đặt dữ liệu đó vào tên hoặc giá trị, một số phương pháp mã hóa như kiểu mã hóa URL% XX được khuyến nghị, mặc dù không có mã hóa nào được xác định hoặc được yêu cầu. " Bạn có thể mang nó theo nghĩa đen với 'pattern =" foo = [^;, \ s] * "' – ErikE

+0

@Geoffrey - Tôi đang đối mặt với vấn đề ở khu vực tương tự - Bạn có thể trả lời câu hỏi này không? - http://stackoverflow.com/questions/34506551/reading-cookie-value-using-url-rewrite-for-iis-wizard-unable-to-validate-at – codetoshare

1

@Geoffrey Để thực hiện hỗ trợ mã của bạn trả lại bất kỳ giá trị cookie, tôi khuyên bạn nên mô hình này:

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

Như một lời nhắc nhở, thông số {} HTTP_COOKIE giá trị trông như thế này ví dụ:

Cookie: foo = myexamplevalue; hết hạn = Thứ Tư, 03 tháng 5 năm 2014 22:31:08 GMT; path = /; HttpOnly \ r \ n

+0

Tôi ban đầu đã nhận xét để sửa lại regex của bạn, hãy đến để tìm ra, '?' làm cho '*' không tham lam. Làm tốt. Mặc dù tôi thích các lớp nhân vật phủ định vì chúng có khả năng nhanh hơn (đặc biệt là khi được cung cấp công cụ sửa đổi sở hữu '+'). – ErikE

Các vấn đề liên quan