154

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

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

或者

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

有这方面的任何文件吗?

URL 由 WordPress / PHP 处理。

4

5 回答 5

196
?var=var#hash

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

此外,研究URL 重写以摆脱丑陋的?var=var.

于 2012-10-02T00:51:17.650 回答
101

? RFC 3986中所述,应位于 # 之前

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

取自超级用户的答案(锚标记是在查询字符串之前还是之后?):

于 2016-01-13T16:57:41.140 回答
4

请注意,当 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'>.
于 2018-02-11T06:23:30.210 回答
1

如果使用的目的#是表示一个页面fragmentthen - yes ?and then #

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

于 2016-07-05T13:45:33.813 回答
1

您可以将此 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>
于 2020-11-06T16:22:08.817 回答