3

我们将我们的网站拆分为多个子域,并且我们所有现有的 cookie 都绑定到一个域。我正在尝试使用 Apache 编辑 cookie 以重置域,但我遇到了正确方法的问题。

问题是 Set-Cookie 标头包含多个不同顺序和大小写的元组,甚至可能不包含域。

我探索了使用 mod_rewrite,因为它有很大的灵活性,但这似乎适用于所有请求 cookie、%{HTTP_COOKIE},而不是单个响应 cookie。我需要修改响应中的每个 cookie。

我已经尝试过 mod_header 并有一个解决方案,但恐怕我仅限于存在元组并以正确的顺序存在。

Header edit Set-Cookie "^([^;]*;).*((?i)(Path|Expires)=.*)$"  "$1 Domain=.domain.com; $2"

这也假设 HttpOnly 和 Secure 如果存在,则位于最后。这是一个安全的选择,因为我们的后端没有设置它们,而 Apache 稍后会附加它们。

后端是一些 Java 应用程序。虽然更改它们可能是长期的方法,但我目前仅限于位于 Java 层前面的 Apache 层。

我尝试了以下方法,但它需要存在域。

Header edit Set-Cookie "^(.*)((?i)(Domain)=[^,;]*[,;]?)(.*)$"  "$1 Domain=.domain.com; $4"

我尝试将域组设为可选,但即使存在域元组,第一组也会变得贪婪。如果域元组不存在,我不在乎是否有任何组变得贪婪。即使将其编码为懒惰也无济于事。

Header edit Set-Cookie "^(.*?)((?i)(Domain)=[^,;]*[,;]?)?(.*)$"  "$1 Domain=.domain.com; $4"

有什么建议么?我的正则表达式技能非常反复试验,但我的直觉告诉我这是可行的。

谢谢,韦斯。


奖金问题:

我需要支持多个域,因为随着我们从开发迁移到生产,它们会发生变化。我可以在设置或附加标头变量时使用环境变量,但在编辑它们时不能。有什么建议么。

这适用于值中的环境变量。

Header append Access-Control-Allow-Origin        "%{HTTP_ORIGIN}e" env=HTTP_ORIGIN

这并不用环境变量中的替换。

Header edit Set-Cookie "([^;]*;).*(Path=.*)"     "$1 Domain=.%{cookieDomain}e; $2"
4

0 回答 0