我设法使用Apache来剥离一个url参数,并将其填充到一个头部以传递给另一个服务器。 看到这个问题作为参考。
现在,我想通过从cookie中获取标头的值(如果它不在URL中)来增加此function。 这是我的尝试:
<VirtualHost *:80> RewriteEngine On RewriteCond %{QUERY_STRING} ^(.*)memberUuid=(.*)$ RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [CO=memberUuid:%2:localhost,E=memberUuid:%2,P] RewriteCond %{HTTP_COOKIE} memberUuid=(.*) RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [E=memberUuid:%2,P] ProxyPreserveHost On ProxyPass /excluded ! ProxyPass / http://127.0.0.1:9000/ ProxyPassReverse / http://127.0.0.1:9000/ Header add iv-user "%{memberUuid}e" RequestHeader set iv-user "%{memberUuid}e" </VirtualHost>
这仍然有效,如果memberUuid在URL中,但似乎没有与cookie一起工作。 我在我的浏览器中有memberUuid cookie,但是如果我离开URL参数, iv-user头部有一个空值。
我也尝试([^;]+)正则expression式,正如本文推荐。
我敢肯定,我的错误与我作为一个完整的Apache白痴有很大的关系。 我是一个完整的小白,不尴尬地说出来。 请赐教!
编辑
我已经更新了我的虚拟主机,以便apache在用户的浏览器中设置memberUuid cookie(如果它来自查询string)。 这样,我可以肯定,cookie是存在于下一个请求(我以前有目标服务器这样做)。
这可能不是唯一的问题(我从来没有在mod_rewrite之前完成cookie匹配); 但我认为这是因为你对RewriteRule的反向引用仍然是%2 。 在以前的RewriteCond只有一个括号匹配,所以它扩展为无。 试试[E=memberUuid:%1,P]