我有一个情况,我想采取以下URL:/1/John并使用Apache的htaccess文件将其重定向到/page.php?id=1&name=john#john以便它转到名为John的HTML锚。我发现了很多关于转义特殊字符和添加[NE]标志以使重定向忽略#符号的参考,但这些都不起作用。例如,添加[NE,R]意味着URL在浏览器地址中显示为原始地址:http://example.com/page.php?id=1&name=john#john。
axkjgtzd1#
这可以使用**[NE] flag**(noescape)。默认情况下,特殊字符,例如&和?,将被转换为它们的十六进制等价物。使用[NE]标志可以防止这种情况发生。更多信息http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_ne
zaq34kh62#
**你可以做其中一件事,但不能同时做两件事。
您可以使用[NE]标志来向Apache表示不要转义“#”字符,但是要使重定向工作,您必须指定要重定向到的绝对URL,而不仅仅是相对页面。Apache不能为您将窗口向下滚动到锚。但是,如果您重定向到绝对URL,浏览器会。
ilmyapht3#
你想做的事情,可以通过URL重写来完成,或者更具体地说,URL美化。I just quickly found this well explained blog post for you,我希望它可以帮助你与learning to rewrite URLs-part。至于#-thing(希望你现在知道我在说什么),我不认为将同一个变量传递给重写的URL两次有什么问题。
#
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/#$2 [R] RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&subpage=$2
不过,你必须避开#-部分,和it seems,它可以这样做:
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/\%23$2 [R,NE]
顺便说一句,URL重写并不是那么难(但可能会变得复杂,我不是Maven),但谷歌可以帮助沿着很多。
wvyml7n54#
你不能做一个内部重定向到一个锚。(想想看:Apache如何向下滚动到锚?)你的链接应该指向/1/john#john。锚不是请求uri的一部分。
/1/john#john
4条答案
按热度按时间axkjgtzd1#
这可以使用**[NE] flag**(noescape)。
默认情况下,特殊字符,例如&和?,将被转换为它们的十六进制等价物。使用[NE]标志可以防止这种情况发生。
更多信息http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_ne
zaq34kh62#
**你可以做其中一件事,但不能同时做两件事。
您可以使用[NE]标志来向Apache表示不要转义“#”字符,但是要使重定向工作,您必须指定要重定向到的绝对URL,而不仅仅是相对页面。Apache不能为您将窗口向下滚动到锚。但是,如果您重定向到绝对URL,浏览器会。
ilmyapht3#
你想做的事情,可以通过URL重写来完成,或者更具体地说,URL美化。
I just quickly found this well explained blog post for you,我希望它可以帮助你与learning to rewrite URLs-part。
至于
#
-thing(希望你现在知道我在说什么),我不认为将同一个变量传递给重写的URL两次有什么问题。不过,你必须避开
#
-部分,和it seems,它可以这样做:顺便说一句,URL重写并不是那么难(但可能会变得复杂,我不是Maven),但谷歌可以帮助沿着很多。
wvyml7n54#
你不能做一个内部重定向到一个锚。(想想看:Apache如何向下滚动到锚?)你的链接应该指向
/1/john#john
。锚不是请求uri的一部分。