Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 迷失在规则翻译中_Apache_Mod Rewrite - Fatal编程技术网

Apache 迷失在规则翻译中

Apache 迷失在规则翻译中,apache,mod-rewrite,Apache,Mod Rewrite,这是我第一次遇到这个东西,我已经在Apache工作了13年了 我有一条重写规则: 重写规则^/taged/(.*)/$/index.php?a=taged&tages=$1 很简单,对吧? 这里有一个交易:如果“tag”的值包含urlencoded字符,它们只是在翻译过程中丢失了。走了,再见

这是我第一次遇到这个东西,我已经在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标签的帖子++


这是一个已知的问题吗?解决方法是什么?

我曾经遇到过一个与此非常类似的问题。这是我用来解决这个问题的方法。问题是,正如链接所示,当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服务器上,重写规则不会导致这种情况。