Apache在无限循环中运行,请求URI太长



我想从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]"**

这些规则单独运行很好,但如果两个规则都被放置,则其失败并出现错误Request 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"

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

删除"无cookie"重写的条件。首先放置有条件的重定向,而不是不带条件的重定向。

 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]"**

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

  1. 传入请求,应用规则
  2. 没有preferenceLocale cookie,已附加查询字符串
  3. URL被发送到要代理的mod_proxy
  4. mod_proxy提出请求
  5. 从步骤1开始重复

这就是为什么查询字符串不断重复自己的原因,并注意到在第二个到最后一个实例之后,ybdomain=参数是如何从test100.fwqae148.yelladworks.in变为192.168.132.148(您要代理的IP)的。这种情况会继续发生,因为cookie preferenceLocale或其缺失会传递给每个代理请求,因此对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]

最新更新