.htaccess 重写规则和数字符号“#”;

.htaccess 重写规则和数字符号“#”;,.htaccess,mod-rewrite,hash,.htaccess,Mod Rewrite,Hash,我试图通过重写规则创建一个友好的URL,但它一直忽略变量值的一部分。 htaccess上的行就这么简单 RewriteRule ^key/(.+)/$ index.php?key=$1 请求的URL是 http://www.example.com/key/c%23/ 但是我只把c作为get变量,而不是c%23 我到底做错了什么?%23是一个散列符号(#),所以它(以及其后的任何内容)实际上不会被mod#u rewrite解析。因此,实际的URL是http://www.foo.com/

我试图通过重写规则创建一个友好的URL,但它一直忽略变量值的一部分。
htaccess上的行就这么简单

RewriteRule ^key/(.+)/$ index.php?key=$1  
请求的URL是

http://www.example.com/key/c%23/  
但是我只把
c
作为get变量,而不是
c%23


我到底做错了什么?

%23
是一个散列符号(
#
),所以它(以及其后的任何内容)实际上不会被mod#u rewrite解析。因此,实际的URL是
http://www.foo.com/key/c
,没有任何
%23
。不过,其他破折号代码可以正常工作。

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

经过一番挖掘,我终于成功了

它只需要重写规则上的
B
标志来转义非字母数字字符,例如


重写规则^key/(.+)/$index.php?key=$1[B]但我如何能绕过该解释并像堆栈溢出一样使用
%23
?()当请求重写#字符时,通常需要已转换为%23。但是,[B]选项是正确的选项,因此可以正确重写%23。 RewriteRule ^key/(.+)/$ index.php?key=$1 [B]