.htaccess 如何使用htaccess将url重写为html锚标记(#)

j8ag8udp  于 2023-10-23  发布在  其他
关注(0)|答案(4)|浏览(97)

我有一个情况,我想采取以下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。

axkjgtzd

axkjgtzd1#

这可以使用**[NE] flag**(noescape)。
默认情况下,特殊字符,例如&和?,将被转换为它们的十六进制等价物。使用[NE]标志可以防止这种情况发生。
更多信息http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_ne

zaq34kh6

zaq34kh62#

**你可以做其中一件事,但不能同时做两件事。

您可以使用[NE]标志来向Apache表示不要转义“#”字符,但是要使重定向工作,您必须指定要重定向到的绝对URL,而不仅仅是相对页面。Apache不能为您将窗口向下滚动到锚。但是,如果您重定向到绝对URL,浏览器会。

ilmyapht

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),但谷歌可以帮助沿着很多。

wvyml7n5

wvyml7n54#

你不能做一个内部重定向到一个锚。(想想看:Apache如何向下滚动到锚?)你的链接应该指向/1/john#john。锚不是请求uri的一部分。

相关问题