RewriteRule 和数字符号 “#”
我试图通过 RewriteRule
创建一个友好的 URL,但它始终忽略 #
作为变量值的一部分。
.htaccess 上的行就这么简单
RewriteRule ^key/(.+)/$ index.php?key=$1
,请求的 URL 是,
http://www.example.com/key/c%23/
但我只获取 c
作为 get 变量,而不是 c%23
。
我到底做错了什么?
I'm trying to make a friendly URL through RewriteRule
but it keeps ignoring #
as part of the variable value.
The line on .htaccess is as simple as this
RewriteRule ^key/(.+)/$ index.php?key=$1
and the requested URL is
http://www.example.com/key/c%23/
but I'm only getting c
as get variable and not c%23
.
What exactly am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最后,经过一番挖掘,我终于成功了。
它只需要 RewriteRule 上的
B
标志来转义非字母数字字符,例如#
Finally after some digging, I managed to pull this off.
It just needs the
B
flag on RewriteRule to escape non-alphanumeric characters such as#
%23
是一个哈希符号 (#
),因此它(及其后面的任何内容)实际上不会被 mod_rewrite 解析。因此,实际的 URL 是http://www.foo.com/key/c
,不含任何%23
。不过,其他破折号代码工作正常。%23
is a hash symbol (#
), so it (and anything after it) doesn't actually get parsed by mod_rewrite. The actual URL therefore ishttp://www.foo.com/key/c
, without any%23
. Other dash-codes work fine, though.%23
是井号 (#)。我猜测浏览器将哈希解释为锚点,而不是将其传递到服务器。例如,如果您用户http://www.foo.com/key/c%20/
,您将得到“c[space]”。%23
is a hash mark (#). I'm guessing the browser is interpreting the hash as an anchor and not passing it on to the server. For instance, if you userhttp://www.foo.com/key/c%20/
you'll get "c[space]".