使用mod_header更改cookie域

时间:2014-03-25 20:06:00

标签: regex apache cookies mod-headers

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

0 个答案:

没有答案