当URL中显示查询字符串和锚标记(哈希标记)时,它们的正确顺序是什么?
http://www.whatever.com?var=val#anchor
或
http://www.whatever.com#anchor?var=val
有没有关于此的文件?
更新:这些网址由Wordpress / PHP处理
答案 0 :(得分:107)
?var=var#hash
#
之后的所有内容都是客户端。
另外,查看url重写以摆脱丑陋的?var=var
答案 1 :(得分:49)
<强>?应该出现在RFC 3986
中所述的#之前relative-ref = relative-part [ "?" query ] [ "#" fragment ]
取自超级用户(https://superuser.com/questions/498617/does-an-anchor-tag-come-before-the-query-string-or-after)的答案:
答案 2 :(得分:1)
如果使用#
的意图是表示page fragment
then - 是?
,则表示#
。
如果#
出现在?
之前,并且不表示页面fragment
(当#
是权限(用户名和密码)的一部分时可能会发生这种情况))必须编码或你有麻烦。同样适用于任何其他特殊字符(:
,@
,...),它们可以为url赋予不同的含义。
答案 3 :(得分:1)
请注意,当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'>.
答案 4 :(得分:0)
您可以将此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>