如何用mod_rewrite更改cookie名称?

时间:2014-05-06 19:41:43

标签: apache mod-rewrite cookies

我试图更改由AWS ELB设置的Cookie的名称,但保留其值以重写条件和重写规则。

这是我迄今为止所做的事情:

RewriteCond %{HTTP_COOKIE} AWSELB=(^BD.*) [NC]
RewriteRule ^(.*) - [CO=SIMELB:%1:.amazonaws.com:lifetime:-1]

显然RewriteRule不正确,但有人可以用正确的语法帮助我吗?

2 个答案:

答案 0 :(得分:2)

好的,按照评论主题,我认为有足够的信息可以开始。最重要的是,你的 由于(^BD.*)捕获组,模式不起作用,特别是因为。{ ^锚。(BD[^;]+)。相反,捕获;以抓住下一个INVALID(或者{。}}的所有内容 如果没有一个字符串的结尾。

要显式取消设置上一个cookie,其他示例使用RewriteCond %{HTTP_COOKIE} AWSELB=(BD[^&]+) [NC] # Delete the old one RewriteRule ^ - [CO=AWSELM:INVALID:.amazonaws.com:0:/:-1] # Add the new one # Specify your lifetime in minutes or 0 for the browser session (60 below)... # ALso add the path # Assumimg the -1 is for insecure cookies RewriteRule ^ - [CO=SIMELB:%1:.amazonaws.com:60:/:-1] 修饰符,尽管我 找不到它的文档。

Apache mod_rewrite documentation on Cookies

BD

要成功取消设置旧cookie,域和路径都需要 与AWS最初设置的完全匹配。检查当前正在设置的cookie并制作 确保你匹配域和&路径。

实际上,没有必要匹配AWSELB=([^;]+) ...你也可以RewriteCond,因为它必须只匹配下面的分号。

附录:

如果该值丢失,可能是因为RewriteRule仅适用于第一个后续匹配RewriteCond。您可以随时重复# no capture group the first time since you don't use it until later RewriteCond %{HTTP_COOKIE} AWSELB=BD.+ [NC] RewriteRule ^ - [CO=AWSELM:INVALID:.amazonaws.com:0:/:-1] # This will continue to execute since the previous didn't have [L] RewriteCond %{HTTP_COOKIE} AWSELB=(BD[^&]+) [NC] RewriteRule ^ - [CO=SIMELB:%1:.amazonaws.com:60:/:-1] 。遗憾的是,这很难看,但我测试了它并发现它能够正常工作。

{{1}}

(注意:在下一次HTTP请求之前,您没有看到更新的cookie值;也就是说,如果您在使用Apache设置后立即从脚本中检查它,则新值将赢得&t; t因为cookie标题必须往返客户端才能出现)

答案 1 :(得分:1)

我没有尝试重写cookie名称,而是使用mod_header指令进行测试,似乎已经解决了我的问题,亚马逊的ELB cookie破坏了与另一个Amazon ELB的会话关联。

RequestHeader edit Cookie AWSELB SIMELB
RequestHeader edit Cookie APPELB AWSELB
Header always edit Set-Cookie AWSELB APPELB
Header edit Set-Cookie AWSELB APPELB

到目前为止,这似乎有效,依赖于浏览器为我维护内存,因为在根据请求检索第一个AWSELB的值后,当我从第二个AWSELB获得set-Cookie响应时,浏览器会看到APPELB = {value}并回忆从第一个AWSELB获得的正确请求cookie。