我试图更改由AWS ELB设置的Cookie的名称,但保留其值以重写条件和重写规则。
这是我迄今为止所做的事情:
RewriteCond %{HTTP_COOKIE} AWSELB=(^BD.*) [NC]
RewriteRule ^(.*) - [CO=SIMELB:%1:.amazonaws.com:lifetime:-1]
显然RewriteRule
不正确,但有人可以用正确的语法帮助我吗?
答案 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。