使用Query String和Anchor Hashtag形成正确的URL

时间:2012-10-02 00:24:19

标签: php wordpress url standards

当URL中显示查询字符串和锚标记(哈希标记)时,它们的正确顺序是什么?

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

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

有没有关于此的文件?

更新:这些网址由Wordpress / PHP处理

5 个答案:

答案 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>