我正在将一个webapp从.NET迁移到Java平台,我必须处理遗留的格式错误的cookie。我需要读取一个逗号分隔值的cookie,如this other question中所述,它无效。当我尝试从HttpServletRequest读取时,它只给出了逗号分隔列表中的第一个值。
我解决此问题的最后一种方法是使用mod_rewrite从apache服务器修改cookie值。
由于我是apache配置的新手,我没有正确的方法将所有逗号替换为另一个角色。
我最好的方法是用这样的方式替换9个逗号或8个逗号......或1个逗号:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8|%9|%10:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8|%9:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2:dev.server.intranet:43200]
我认为它很丑陋且不完整,因为如果以逗号分隔的列表超过10个值,则需要额外调用才能完全修复。
我一直在尝试使用Next [N]标记进行迭代,直到没有逗号,但它没有用。
我一直在寻找mod_headers,但我认为我处于相同的迭代问题。
答案 0 :(得分:1)
最后我找到了解决方案:
RequestHeader edit* Cookie "(,)" "|"
所有Cookie中的所有逗号都将替换为“|”字符。