RewriteRule和数字符号“#”

时间:2011-05-20 19:47:33

标签: .htaccess mod-rewrite hash

我正在尝试通过RewriteRule建立一个友好的网址,但它会一直忽略#作为变量值的一部分。
.htaccess上的这一行就像这个

一样简单
RewriteRule ^key/(.+)/$ index.php?key=$1  

,请求的网址为

http://www.example.com/key/c%23/  

但我只是c获取变量而不是c%23

我究竟做错了什么?

3 个答案:

答案 0 :(得分:4)

经过一番挖掘后,我设法将其拉下来。

只需要RewriteRule上的B标志来转义非#

等非字母数字字符
RewriteRule ^key/(.+)/$ index.php?key=$1 [B]

答案 1 :(得分:0)

%23是一个哈希符号(#),所以它(及其之后的任何内容)实际上并没有被mod_rewrite解析。因此,实际网址为http://www.foo.com/key/c,没有任何%23。但其他破折号代码也可以正常工作。

答案 2 :(得分:0)

%23是一个哈希标记(#)。我猜测浏览器将哈希解释为锚点而不是将其传递给服务器。例如,如果您使用http://www.foo.com/key/c%20/,则会获得“c [space]”。