我正在尝试通过RewriteRule
建立一个友好的网址,但它会一直忽略#
作为变量值的一部分。
.htaccess上的这一行就像这个
RewriteRule ^key/(.+)/$ index.php?key=$1
,请求的网址为
http://www.example.com/key/c%23/
但我只是c
获取变量而不是c%23
。
我究竟做错了什么?
答案 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]”。