骨干路由器:使用hashbangs

时间:2014-03-04 02:43:34

标签: backbone.js router

我在Backbone.js中设置了一个简单的路由器,同时我注意到了一个问题,我用Google搜索了很长时间并找到了一些解决方案。

问题是每当我导航到一个网址时,这个网址都会在我在应用程序内部时工作,但是一旦你将它加入书签并返回它显然会返回404,因为该页面不存在。

Backbone.history.navigate('test', true);

这将导航到http://www.domain.com/test,这很棒,但是一旦刷新相同的网址,它就会返回404.

有一些方法可以使用特定的.htaccess文件来实现这一点,但我在现有网站中构建它,所以我不能使用它。

Backbone.js中是否有办法恢复使用hashbangs?我的网址看起来像这样`http://www.domain.com/#!/test 这可能不是最干净的URL,但至少它会起作用。

或者我只是错过了一些明显的东西?不可能我是唯一有这个问题的人。

1 个答案:

答案 0 :(得分:1)

您根据自己的网址使用pushState,因此您有两个主要选项:

  • 在启动Backbone历史记录时停止使用pushState(这相当于使用hashbang,但SEO除外)
  • 让您的服务器为您的应用生成的每个网址返回一个页面(它可以是完全相同的页面)

在第二种情况下,如果您不关心搜索引擎优化,您可以使用包含Backbone应用程序的所有规则始终返回(例如)index.html。当您启动Backbone的历史记录时,它会抓住URL并导航到正确的页面(尽管您可能具有“双重渲染”效果)。

如果您担心SEO,您需要返回SEO的页面内容以及Backbone应用程序。