我设法使用 apache 剥离 url 参数并将其填充到标头中以便传递到另一台服务器。请参阅此问题以供参考。
现在我想通过从 cookie 中获取标头的值(如果 URL 中不存在该值)来添加此功能。以下是我尝试的:
<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
标头的值将为空。
我也尝试了([^;]+)
我的正则表达式,按照建议这个帖子。
我确信我的错误与我是个彻头彻尾的 Apache 白痴有很大关系。我是个彻头彻尾的菜鸟,说出来我一点也不尴尬。请指教!
编辑
我已更新虚拟主机,以便 apache 会memberUuid
在用户浏览器中设置来自查询字符串的 cookie。这样,我就可以确保下次请求时该 cookie 存在(我之前让目标服务器执行此操作)。
答案1
这可能不是唯一的问题(我以前从未在 mod_rewrite 中进行过 cookie 匹配);但我认为这是因为您对 的反向引用RewriteRule
仍然是%2
。您在前一个 中只有一个带括号的匹配RewriteCond
,因此它扩展为空。尝试[E=memberUuid:%1,P]