当查询字符串和锚标记(哈希标记)在URL中都可见时,它们出现的正确顺序是什么?
http://www.whatever.com?var=val#anchor
或
http://www.whatever.com#anchor?var=val
有这方面的文件吗?
这些URL由WordPress/PHP处理。
?var=var#hash
#
之后的所有内容都是客户端。
另外,查看URL重写以摆脱丑陋的?var=var
。
? 应该在 # 之前,如 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>
而不仅仅是网址链接
<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>