mod_rewrite:为什么apache URL-encode%{HTTP_COOKIE}?

时间:2010-11-21 20:44:31

标签: mod-rewrite cookies

我正在尝试匹配Cookie中的值。问题是,Apache使值url编码。所以,如果我这样做:

RewriteCond %{HTTP_COOKIE} ^(.+)$ [NC]

它将抓住这个:

session%3DeXnR1oDL1Reb8Z3Gdgk7Sg%26account%3D2%3B

而不是:

session=eXnR1oDL1Reb8Z3Gdgk7Sg&account=2

因此无法获取帐号来执行此操作:

RewriteRule ^$ /accounts/%1/ [R=301,L]

请帮忙!我已经在谷歌和stackoverflow上到处寻找,没有人解决这个问题。非常感谢你。

2 个答案:

答案 0 :(得分:0)

我从来没有找到答案 - 但是,我确实找到了解决办法。对于那些有同样问题的人,这里是:

使用不会进行URL编码的字符分隔您的子Cookie值。我使用短划线字符“ - ”。例如“VAL1 - VAL2”

祝你好运!

答案 1 :(得分:0)

您尝试过使用旗帜吗?> NE | noescape?

默认情况下,特殊字符,例如&例如,将转换为等效的十六进制代码。使用[NE]标志可以防止这种情况发生。

RewriteRule ^ / anchor /(.+)/bigpage.html#$1 [NE,R]

以上示例将/ anchor / xyz重定向到/bigpage.html#xyz。省略[NE]将导致#被转换为其等效的十六进制代码%23,这将导致404未找到错误条件。

来源:http://httpd.apache.org/docs/2.3/rewrite/flags.html