Apache2 - 从 URL 参数或 cookie 转发值(以存在者为准)

Apache2 - 从 URL 参数或 cookie 转发值(以存在者为准)

我设法使用 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>

如果memberUuidURL 中有 ,这种方法仍然有效,但对于 cookie 似乎无效。memberUuid我的浏览器中有 cookie,但如果我省略 URL 参数,则iv-user标头的值将为空。

我也尝试了([^;]+)我的正则表达式,按照建议这个帖子

我确信我的错误与我是个彻头彻尾的 Apache 白痴有很大关系。我是个彻头彻尾的菜鸟,说出来我一点也不尴尬。请指教!

编辑

我已更新虚拟主机,以便 apache 会memberUuid在用户浏览器中设置来自查询字符串的 cookie。这样,我就可以确保下次请求时该 cookie 存在(我之前让目标服务器执行此操作)。

答案1

这可能不是唯一的问题(我以前从未在 mod_rewrite 中进行过 cookie 匹配);但我认为这是因为您对 的反向引用RewriteRule仍然是%2。您在前一个 中只有一个带括号的匹配RewriteCond,因此它扩展为空。尝试[E=memberUuid:%1,P]

相关内容