Mod rewrite mod_rewrite:为什么apache URL编码%{HTTP_COOKIE}?

Mod rewrite mod_rewrite:为什么apache URL编码%{HTTP_COOKIE}?,mod-rewrite,cookies,Mod Rewrite,Cookies,我正在尝试匹配cookie中的值。问题是,Apache对url值进行了编码。因此,如果我这样做: RewriteCond %{HTTP_COOKIE} ^(.+)$ [NC] 它将捕获以下内容: session%3DeXnR1oDL1Reb8Z3Gdgk7Sg%26account%3D2%3B 与此相反: session=eXnR1oDL1Reb8Z3Gdgk7Sg&account=2 因此,无法获取账号来执行此操作: RewriteRule ^$ /accounts/%1/ [R

我正在尝试匹配cookie中的值。问题是,Apache对url值进行了编码。因此,如果我这样做:

RewriteCond %{HTTP_COOKIE} ^(.+)$ [NC]
它将捕获以下内容:

session%3DeXnR1oDL1Reb8Z3Gdgk7Sg%26account%3D2%3B
与此相反:

session=eXnR1oDL1Reb8Z3Gdgk7Sg&account=2
因此,无法获取账号来执行此操作:

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

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

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

使用不会进行URL编码的字符分隔子cookie值。我用了破折号“-”。e、 g.“VAL1--VAL2”


祝你好运

你试过使用flag->NE | noescape吗

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

重写规则^/anchor/(.+)/bigpage.html#$1[NE,R]

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

资料来源: