我有一种情况,我想采用以下 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。
我有一种情况,我想采用以下 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] 标志(noescape)。
默认情况下,特殊字符(例如 & 和 ?)将被转换为等效的十六进制代码。使用 [NE] 标志可以防止这种情况发生。
更多信息http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_ne
You can in fact do one of these things, but not both.
You can use the [NE] flag to signify to Apache not to escape the '#' character, but for the redirect to work, you have to specify an absolute URL to redirect to, not simply a relative page. Apache cannot do the scrolling of the window down to the anchor for you. But the browser will, if you redirect to an absolute URL.
你想做的事情,可以通过 URL 重写来完成,或者更具体地说,可以通过 URL 美化来完成。
我很快就为您找到了这篇解释清楚的博客文章,希望它可以帮助您学习重写 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
不过,您必须避开#-part,而且似乎可以通过以下方式完成:
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/\%23$2 [R,NE]
顺便说一句,URL 重写并不难(但可能会变得复杂,而且我不是专家),但 Google 可以在此过程中提供很多帮助。
您不能对锚点进行内部重定向。(想想看:Apache 如何向下滚动到锚点?)您的链接应该指向/1/john#john. 锚点不是请求 uri 的一部分。