当查询字符串和锚标记(散列标记)在 URL 中都可见时,它们出现的正确顺序是什么?
http://www.whatever.com?var=val#anchor
或
http://www.whatever.com#anchor?var=val
有这方面的文档吗?
URL 由 WordPress / PHP 处理。
?应该在 # 之前,如 RFC 3986:
中所述relative-ref = relative-part [ "?" query ] [ "#" fragment ]
取自超级用户的答案(锚标记是在查询字符串之前还是之后?):
请注意,当 URL 同时具有锚标记 (#) 和查询字符串 (?) 时,浏览器可能会忽略查询字符串并导航至锚标记而无需重新加载页面。
可能需要使用
提交页面<form action='webpage.php?q=string#tag' method='GET or POST'>
<input type='text' id='q' name='q' value='string'>
<input type='submit' value='submit'>
</form>
而不仅仅是 URL 链接
<a href='webpage.php?q=string#tag'>.
如果使用
#
的目的是表示页fragment
然后 - 是?
然后#
.
如果
#
在 ?
之前出现并且它不是表示页面 fragment
(当 #
是授权的一部分(用户名和密码)时可能会发生这种情况)它必须被编码或者你有麻烦.这同样适用于可能赋予 URL 不同含义的任何其他特殊字符(:
,@
,...)。
您可以将此 JavaScript 代码放置在您网站的公共部分,以强制将所有不正确的请求以正确的顺序重定向到模拟:
<script>
var p=location.hash.indexOf("?");
if(p>=0){
var goodLoc = location.href.replace(location.hash, "");
location.replace(goodLoc + window.location.hash.substring(p) + window.location.hash.substring(0, p));
}
</script>