我怎么能隐藏#!在浏览器地址栏上?

时间:2011-12-01 00:22:09

标签: php javascript ajax mod-rewrite browser

假设我有以下链接:

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,但#!将被隐藏)

有人能举例说明上述每个问题吗?

非常感谢!

4 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

模块重写仅更改服务器看到的内容。模块重写不能,改变本地浏览器看到的内容,即运行js的位置。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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