这是我第一次遇到这个问题,而且我已经和Apache合作了大约13年了。
我有这个重写规则:
RewriteRule ^ / tagged /(.*)/$ /index.php?a=tagged&tags=$1
很简单吧? 这是交易:如果“标签”的值包含urlencoded字符 - 它们只是在翻译中丢失。走了,再见!?
如果我输入这样的url:/ tagged / c%2B%2B /这是urlencode c ++的方法 然后index.php接收tags = c的值 我的++去了哪里?
当我直接在网址中输入c%2B%2B时,如下所示: /index.php?a=tagged&tags=c%2B%2B然后一切都很好,很高兴找到标记为c ++的帖子
这是一个已知问题吗?什么是解决方法?
答案 0 :(得分:1)
我遇到的问题与此非常相似。这是我用来解决它的link。问题是,正如链接所暗示的那样,当mod_rewrite执行其规则时,Apache已经没有使用URL,因此当您重写PHP脚本的URL时,PHP会将+解释为空格。
编辑:帖子已更新:
2009年8月24日更新:Apache 2.2.12包含RewriteRule的B标志,用于解决此问题。它是在2.2.7中引入的,但如果我正确读取了更改日志,则会一直打到2.2.12。感谢Michael Stillwell让我知道。
答案 1 :(得分:0)
您是否尝试使用
RewriteRule ^/tagged/(.*)/$ /index.php?a=tagged&tags=$1 [NE]
NE代表NoEscape。从来没有使用它,所以不知道它是否只是没有转义尚未urlencoded的字符,或只是写非urlencoded字符并转换那些。