【问题标题】:How can I hide #! on browser address bar?我怎么能隐藏#!在浏览器地址栏上?
【发布时间】:2011-12-01 08:40:42
【问题描述】:

假设我有以下链接:

www.blahblah.com/#!?page=index

如何将其转换为以下之一:

  • www.blahblah.com/#!/index(这个应该是用mod_rewrite制作的)
  • www.blahblah.com/ajax/index(仍然是 mod_rewrite,但 #! 替换为 ajax)
  • www.blahblah.com/index(该页面将像 facebook 一样使用 AJAX 加载,但 #! 将被隐藏)

谁能给我上面每个问题的例子?

非常感谢!

【问题讨论】:

  • 来吧伙计们,这不是一个糟糕的问题,尽管使用 mod_rewrite 的前提是有缺陷的。仔细看
  • 为什么人们不赞成这个?
  • # octothorpe 之后的东西称为路径片段。服务器和 mod_rewrite 都不会看到它。它必须在客户端处理。
  • @KristianAntonsen:真的吗?他希望他提供的第一个 URL 在地址栏中以不同的方式显示。我没有问题理解他想做什么;我只是不确定在这种情况下的最佳做法是什么。
  • 当您加载像www.blahblah.com/#!?page=index 这样的URL 时,浏览器将向服务器发送www.blahblah.com/ 的请求。它不会在散列后发送任何内容,因此您无法使用 PHP 或 mod_rewrite 对其进行修改。您唯一真正的选择是使用 javascript 来处理哈希,并重定向到其他 URL。但是 javascript 不可靠且速度慢。基本上,你应该避免在 URL 中使用 #,除非它是为了一些琐碎的事情(比如滚动到页面上的特定点,或者激活页面上某处的特定“标签”)

标签: php javascript ajax mod-rewrite browser


【解决方案1】:

哈希 (#) 之后的任何内容都不会发送到服务器,因此您无法在服务器端读取它。但是,您可以使用 JavaScript 重定向用户。您要查找的信息将存储在变量window.location.hash 中。

在页面加载时,您可以执行以下操作:

hashString = window.location.hash.substring(8);
window.location = 'http://www.blahblah.com/'+hashString;

我们使用 substring 删除前八个字符 (#!?page=),所以我们将留下 index

【讨论】:

    【解决方案2】:

    模块重写只会改变服务器看到的内容。模块重写不行,改变本地浏览器看到的,就是运行js的地方。

    Facebook 加载的方式是通过请求新页面的内容,然后更新窗口 URL 而不必重新加载所有内容。这是完成的,所以如果需要共享或链接项目,则链接与他们实际查看的内容都是最新的,因此当页面重新加载时,浏览器会加载实际完整的 php 页面,请求从服务器。

    【讨论】:

      【解决方案3】:

      ajax 页面加载策略中隐藏的 # 是由 HTML 5 pushState 完成的。

      【讨论】:

        【解决方案4】:

        在 javascript 中,您可以为此使用 window.location.hash

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-15
          • 2013-08-21
          • 2013-07-21
          • 2013-04-02
          • 1970-01-01
          • 1970-01-01
          • 2016-10-28
          相关资源
          最近更新 更多