3

我想从 cookie 中读取一个值并将该值作为查询字符串传递,为此我使用了以下规则

**1 : "RewriteCond %{HTTP_COOKIE} !^preferenceLocale=([^;]+) [NC] 

RewriteRule ^/*(.*) http://192.168.132.148/cs/Satellite?pagename=YBWrapper&ybdomain=%{HTTP_HOST}&ybpage=$1&%{QUERY_STRING} [P]"**

if cookie value is available then i need to execute fallowing set of condition and rule,  

**2 :"RewriteCond %{HTTP_COOKIE} preferenceLocale=([^;]+) [NC]

RewriteRule ^/*(.*) http://192.168.132.148/cs/Satellite?pagename=YBWrapper&ybdomain=%{HTTP_HOST}&ybpage=$1&preferred_locale=%1&%{QUERY_STRING} [P]"**

这些规则单独工作正常,但如果两个规则都被放置它失败并出现错误请求 UIR 太长,

如果我们看到日志 HTTP_HOST 被一些垃圾值替换

192.168.132.148 - - [11/Sep/2012:11:23:15 +0530] "GET /cs/Satellite?pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=192.168.132.148&ybpage=cs/Satellite&preferred_locale=1302157366636&pagename=YBWrapper&ybdomain=test100.fwqae148.yelladworks.in&ybpage= HTTP/1.1" 414 345 "http://test100.fwqae148.yelladworks.in/" "Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1"
4

2 回答 2

0

你只需要给出一个条件,然后对 Cookie 进行所需的重写。

删除“无 cookie”Rewrite 的条件。首先将 Redirect 与条件放在一起,而不是 Redirect without Condition。

 if cookie value is available then i need to execute fallowing set of condition and rule,  

**2 :"RewriteCond %{HTTP_COOKIE} preferenceLocale=([^;]+) [NC]

RewriteRule ^/*(.*) http://192.168.132.148/cs/Satellite?pagename=YBWrapper&ybdomain=%{HTTP_HOST}&ybpage=$1&preferred_locale=%1&%{QUERY_STRING} [P]"**\


 RewriteRule ^/*(.*) http://192.168.132.148/cs/Satellite?pagename=YBWrapper&ybdomain=%       {HTTP_HOST}&ybpage=$1&%{QUERY_STRING} [P]"**
于 2012-09-11T06:13:39.167 回答
0

如果规则和代理目标位于同一主机上,则每次都将应用规则。例如:

  1. 传入请求,应用规则
  2. 没有preferenceLocalecookie,附加了查询字符串
  3. URL 被发送到 mod_proxy 进行代理
  4. mod_proxy 发出请求
  5. 从步骤 1 开始重复。

这就是查询字符串不断重复自身的原因,并注意在第二个到最后一个实例之后,ybdomain=参数如何从test100.fwqae148.yelladworks.in变为192.168.132.148(您要代理到的 IP)。这种情况继续发生,因为 cookiepreferenceLocale或缺少 cookie 被传递给每个代理请求,因此对 cookie 的检查将始终为真。

您需要添加一些条件来检查查询字符串,以便它不会再次代理请求:

RewriteCond %{HTTP_COOKIE} !preferenceLocale=([^;]+) [NC] 
RewriteCond %{QUERY_STRING} !pagename=YBWrapper
RewriteRule ^/*(.*) http://192.168.132.148/cs/Satellite?pagename=YBWrapper&ybdomain=%{HTTP_HOST}&ybpage=$1&%{QUERY_STRING} [P]

RewriteCond %{HTTP_COOKIE} preferenceLocale=([^;]+) [NC]
RewriteCond %{QUERY_STRING} !pagename=YBWrapper
RewriteRule ^/*(.*) http://192.168.132.148/cs/Satellite?pagename=YBWrapper&ybdomain=%{HTTP_HOST}&ybpage=$1&preferred_locale=%1&%{QUERY_STRING} [P]
于 2012-09-11T06:56:19.110 回答