Apache 迷失在规则翻译中
这是我第一次遇到这个东西,我已经在Apache工作了13年了 我有一条重写规则: 重写规则^/taged/(.*)/$/index.php?a=taged&tages=$1 很简单,对吧? 这里有一个交易:如果“tag”的值包含urlencoded字符,它们只是在翻译过程中丢失了。走了,再见 <如果我输入URL,像这样:/Tabg/C%2B%2B/这是URLCONDENC+C++的WITHE方式 然后index.php接收tags=c的值 我爸爸去哪儿了 当我直接在url中输入c%2B%2B时,如下所示: /php?a=taged&tages=c%2B%2B如果一切正常,很高兴找到我贴了c标签的帖子++Apache 迷失在规则翻译中,apache,mod-rewrite,Apache,Mod Rewrite,这是我第一次遇到这个东西,我已经在Apache工作了13年了 我有一条重写规则: 重写规则^/taged/(.*)/$/index.php?a=taged&tages=$1 很简单,对吧? 这里有一个交易:如果“tag”的值包含urlencoded字符,它们只是在翻译过程中丢失了。走了,再见
这是一个已知的问题吗?解决方法是什么?我曾经遇到过一个与此非常类似的问题。这是我用来解决这个问题的方法。问题是,正如链接所示,当mod_rewrite执行其规则时,Apache已经取消了URL的scape,因此当您将URL重写为PHP脚本时,PHP将把+解释为空格 编辑:帖子已更新: 2009年8月24日更新:Apache2.2.12包含一个B标志,用于重写用于此问题的规则。它是在2.2.7中引入的,但是如果我正确地阅读了变更日志,它会一直中断到2.2.12。谢谢Michael Stillwell让我知道 你有没有试着使用
RewriteRule ^/tagged/(.*)/$ /index.php?a=tagged&tags=$1 [NE]
NE代表NoEscape。从未使用过它,所以不知道它是否只是不转义尚未URL编码的字符,或者只写非URL编码的字符并转换那些已URL编码的字符。谢谢。我查看了$\u服务器变量,看起来我可以使用$\u服务器['REQUEST\u URI'],它是原始url,具有urlencoded值。有趣的是,在lighttpd服务器上,重写规则不会导致这种情况。