使用查询字符串和锚标签形成正确的 URL

当查询字符串和锚标记(哈希标记)在 URL 中都可见时,它们出现的正确顺序是什么?

http://www.whatever.com?var=val#anchor

或者

http://www.whatever.com#anchor?var=val

有相关文件吗?

这些 URL 由 WordPress/PHP 处理。

87697 次浏览
?var=var#hash

#之后的一切都是客户端。

另外,查看 URL 重写以摆脱丑陋的 ?var=var

? 应该出现在 RFC 3986中指出的 # 之前:

relative-ref = relative-part [ "?" query ] [ "#" fragment ]

摘自超级用户的回答( 锚标记是出现在查询字符串之前还是之后? < em >) :

如果使用 #的意图是表示 那就呼叫 fragment-yes ?,然后是 #

如果 #出现在 ?之前,而且它不是表示一个页面 fragment(当 #是权限(用户名和密码)的一部分时可能会发生这种情况) ,那么它必须被编码,否则你就有麻烦了。同样的情况也适用于其他可能赋予 URL 不同含义的特殊字符(:@、 ...)。

请注意,当 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'>.

你可以把这些 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>