我有一个情况,我想获取以下 URL:
/1/约翰
并使用 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.
这可以使用 [NE] 标志(无转义)。
默认情况下,特殊字符(例如 & 和 ?)将转换为其等效的十六进制代码。使用 [NE] 标志可以防止这种情况发生。
更多信息http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_ne
您可以执行其中一项操作,但不能同时执行两项操作。
您可以使用 [NE] 标志向 Apache 表示不要转义“#”字符,但为了使重定向正常工作,您必须指定要重定向到的绝对 URL,而不仅仅是相对页面。 Apache 无法为您将窗口向下滚动到锚点。但如果您重定向到绝对 URL,浏览器就会这么做。
你想做的事情,可以通过URL重写,或者更具体地说,URL美化来完成。
我很快就为您找到了这篇解释良好的博客文章,我希望它可以帮助您解决学习重写 URL 部分。
至于
#
的事情(希望你现在知道我在说什么),我认为将同一个变量传递给重写的 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
不过,你必须逃避
#
部分,并且 看起来 可以这样做:
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/\%23$2 [R,NE]
顺便说一句,URL 重写并不难(但可能会变得复杂,而且我不是专家),但 Google 可以在此过程中提供很多帮助。
/1/john#john
。锚点不是请求 uri 的一部分。