我们将我们的网站分成多个子域,我们所有现有的cookie都绑定到一个域。我正在尝试使用Apache编辑cookie来重置域名,但我遇到了正确的方法问题。
问题是Set-Cookie标头包含各种顺序和大小写的多个tupple,甚至可能不包含域。
我探索了使用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"
我尝试过让域名组成为可选项,但即使域名存在,第一组也会变得贪婪。如果域tupple不存在,我不在乎任何组是否贪婪。即使将其编码为懒惰也无济于事。
Header edit Set-Cookie "^(.*?)((?i)(Domain)=[^,;]*[,;]?)?(.*)$" "$1 Domain=.domain.com; $4"
有什么建议吗?我的正则表达式技巧是非常试验和错误,但我的直觉告诉我这是可行的。
谢谢,Wes。
奖金问题:
我需要支持多个域,因为它们随着我们从开发迁移到生产而发生变化。我可以在设置或附加标题变量时使用环境变量,但在编辑它时则不能。任何建议。
这适用于值中的环境变量。
Header append Access-Control-Allow-Origin "%{HTTP_ORIGIN}e" env=HTTP_ORIGIN
这不包括替换中的环境变量。
Header edit Set-Cookie "([^;]*;).*(Path=.*)" "$1 Domain=.%{cookieDomain}e; $2"