21

我正在创建的一个小网站(更像是摆弄)使用 AJAX 加载每个页面。以前我正在更改 url 的哈希,这很好用但很丑陋,用户可以刷新页面,它会留在同一页面上。

现在我已经切换到在 JS History API 中使用 pushState,它看起来好多了,并且后退和前进工作,但刷新没有。例如:

转到:http://example.com/page2转到 404,因为没有真正的页面称为第 2 页。但是,如果我单击使用 pushState 方法更改 url 的按钮,它应该可以正常工作。

如何使用新的 History API 允许刷新和永久链接?

(以及搜索引擎如何处理这个问题,因为谷歌必须创建一种索引哈希 url 的方式,通过让开发人员切换到#!,他们是否有可能在未来为历史 API 做类似的事情?)

4

3 回答 3

18

您根本不应该使用pushState推送无效的 URL。它适用于网站在使用和不使用 AJAX 的情况下使用的情况 - 即,当使用 AJAX 创建此输出时,您推送的 URL 将导致没有 AJAX 的相同输出。

如果您只想要虚拟 URL(例如在 pushState 之前的时代),请继续使用井号标签。

于 2011-05-09T23:11:22.370 回答
8

这是一个有点老的问题,但它是谷歌搜索结果中的佼佼者之一。为了寻求帮助,这是我的解决方案。

您可以使用 Apache 的 Mod_Rewrite 将 url 重写到中心位置。例如:example.com/p2 从 example.com/index.php?page=p2 获取其页面内容 您可以保留当前的 ​​History API 和 AJAX 实现以获取内容并在您的 .htaccess 中包含以下内容

<ifModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^([^/\.]+)/?$ index.php?page=$1&full=1 [L]
</ifModule>

在您的 index.php 中:

<?php
  if(isset($_GET['full']) {
    //Generate the full page here
  }else{
    //Generate just the content for AJAX
  }
?>

这个页面是使用 mod_rewrite 重定向整个网站的一个很好的入门。(评论 11 和 13 也有有用的补充)

于 2011-12-05T22:02:14.483 回答
2

我必须将 404 错误重定向到站点主页(加载 AJAX 请求的那个),然后获取 URL 的最后一个组件,并运行使用 AJAX 请求加载页面的 javascript 函数。不是一个很好的解决方案,但它似乎运作良好。

于 2011-05-09T22:26:21.233 回答