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



当查询字符串和锚标记(哈希标记)在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>

最新更新