2009-08-18 100 views
6

我需要采用标准的传入url和 重写 重定向它们以在单个页面上定位特定的锚点(传入的html页面名称将成为锚点名称)。例如,规则是这样的:如何重定向到包含锚点(#)的网址?

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [R] 

所以这个网址:

http://foo.com/files/bar.html 

...会变成:

http://foo.com/test.html#bar 

规则本身工作正常,但字符#在浏览器地址栏中编码为:

http://foo.com/test.html%23bar 

哪个当然不能作为锚点正常工作。 .htaccess中有没有办法强制它不对散列进行编码?我也尝试像\#一样逃脱它,但这没有什么区别。

回答

9

尝试noescape(NE)的标志在您的规则:

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [NE, R] 
+0

真棒,谢谢。我认为它必须是简单的东西,但谷歌没有告诉我的方式;) – 2009-08-18 01:03:32

5

使用NE,或无处可逃标志:

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [NE,R]

+3

帕特击败了我57秒;)让世界知道SO的“新答案”警告需要更长的时间! – inerte 2009-08-18 00:23:27

+1

Pat的胜利! :) – Pat 2009-08-18 00:30:21

+1

+1为“失败者”,因为他的代码是短一个字节:-) – Olaf 2013-07-01 09:03:50