Iis 7 使用IIS7的URL重写在Cookie中捕获值

Iis 7 使用IIS7的URL重写在Cookie中捕获值,iis-7,url-rewriting,Iis 7,Url Rewriting,我需要为我的IIS 7.5网站编写一个URL重写规则,该规则捕获特定cookie中的值,然后使用该值构造URL。例如,传入的请求如下所示: 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

我需要为我的IIS 7.5网站编写一个URL重写规则,该规则捕获特定cookie中的值,然后使用该值构造URL。例如,传入的请求如下所示:

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
我想将它们路由到这个(基于“foo”cookie值):


在查看文档和搜索示例之后,我被难住了!谢谢你的帮助。

回答我自己的问题,这里有一个有效的例子。该模式可能需要额外的工作,具体取决于需要支持哪些字符,但以下规则将使用发现的cookie值并路由到发现的服务器——服务器可以通过IPv4地址或名称(字母数字和句点)指定


@Geoffrey要使您的代码支持返回任何cookie值,我建议使用以下模式:

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

作为提醒,{HTTP_COOKIE}值如下所示,例如:


Cookie:foo=myexamplevalue;expires=2014年5月3日星期三格林威治标准时间22:31:08;路径=/;HttpOnly\r\n

我建议
pattern=“foo=[^;]*”
使模式匹配任何可能的cookie值--您的模式限制太多。请参阅其中的说明“此字符串是一个不包括分号、逗号和空格的字符序列。如果需要在名称或值中放置此类数据,建议使用一些编码方法,例如URL样式%XX编码,但不定义或不需要任何编码。”您可以使用
pattern=“foo=[^;,\s]*”逐字理解它
@Geoffrey-我在类似领域面临问题-你能回答这个问题吗?-这有点让人恼火我的cookie在字符串的末尾,没有以分号结尾
/en/#accept en empty?cookie=ARRAffinity=201b1fd8d701339a2f00e0ee61740aea30fa71e70a108b56894fc119e397c038;%20locale=fr
我最初评论是为了更正您的正则表达式,来看看,
使
*
不贪婪。做得好。尽管我更喜欢否定字符类,因为它们可能更快(特别是在给定所有格修饰符
+
时)。
<rule name="Route Base On Cookie" stopProcessing="true">
  <match url="^(.*)" />
    <conditions>
       <add input="{HTTP_COOKIE}" pattern="foo=(.*?);" />
    </conditions>
  <action type="Rewrite" url="http://{C:1}/{R:0}" />
</rule>
<add input="{HTTP_COOKIE}" pattern="foo=(.*?);" />