【问题标题】:How do I remove #! from URL我如何删除#!来自网址
【发布时间】:2014-06-24 05:57:34
【问题描述】:

我正在努力改变

http://domain.co.uk/#!/pagename

http://domain.co.uk/pagename

我正在考虑重新编写 URL,然后意识到由于它是一个单页网站,这将无法正常工作,所以我被卡住了!

在现有的代码库(一个快速的 javascript 函数?)的情况下,有没有办法做到这一点,或者它只是我必须忍受的东西?

!我猜是后者(我想可能会更改为 domain.co.uk#pagename),但很高兴被证明是错误的!

【问题讨论】:

    标签: javascript url url-rewriting


    【解决方案1】:

    基础很简单:

    if (location.hash && (location.hash.substr(1,1) === "!")) {
        location.replace(location.toString().replace('#!', "/"));
    };
    

    您只需要确保新的网址首先可以正常工作。

    这意味着:

    1. 更新客户端代码以使用 pushState 和朋友(这样您就停止生成 hashbang URI)
    2. 更新服务器端代码,使其可以在不依赖客户端代码的情况下以正确的状态交付站点的每个页面(这样 (a) 任何页面都可以快速有效地加载,并且 (b) JavaScript 可以提高性能奖金而不是讨厌依赖的搜索引擎)

    【讨论】:

    • 感谢您的回答 - 不幸的是,我不够聪明,无法实现这一点,因为每当我尝试像上面那样重写时,我的服务器都会将其视为单独的页面并抛出 404 - 对于单页站点我已经意识到没有办法绕过 # - 除非我误解了上述内容??!!??
    • 一个单独的页面。请参阅答案中列出的先决条件列表中的第 2 点。单页网站通常是一个糟糕的主意(这就是为什么 Twitter 会出现可怕的性能问题并放弃单页实现的原因)。
    • 感谢您的指导 - 我看到了第 2 点 - 但根本不明白 - 你能指出我正确的方向吗 - 我不知道如何让我的服务器提供 1 页但随后根据 URL 中的第二个参数转到该页面上的正确子部分,而不将其视为不同的页面 - 我认为这是在此阶段重写的 URL?对不起,如果我只是不关注,但我显然有点厚!
    • 不涉及 URL 重写。如果您只想链接到页面的某个子部分,那么这将是一个带有# 而没有! 的 URL。如果你想在 DOM 被 JS 操作之后链接到它所处的状态,那么你找出 HTML 会产生与从原始 HTML 开始并运行 JS 相同的效果,然后你提供那个改为向客户端发送 HTML。
    • 谢谢 - 我想我现在明白了,所以标记为已接受 - 可能会问另一个问题(这个问题的单独问题!)但我们会看到:-P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2013-05-17
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多