我们将我们的网站拆分为多个子域,并且我们所有现有的 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"