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

问题描述 投票:0回答:5

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

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

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

有这方面的文档吗?

URL 由 WordPress / PHP 处理。

php wordpress url standards url-fragment
5个回答
226
投票
?var=var#hash

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

此外,研究URL重写以摆脱丑陋的

?var=var


125
投票

?应该在 # 之前,如 RFC 3986:

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

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


6
投票

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

5
投票

如果使用

#
的目的是表示
fragment
然后
- 是
?
然后
#
.

如果

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


2
投票

您可以将此 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>
© www.soinside.com 2019 - 2024. All rights reserved.