Backbone.js pushState不起作用,并给出404错误

时间:2011-09-23 15:48:34

标签: javascript backbone.js

我一直在观看Backbone.js上PeepCode的截屏视频,并用它完成了编码。

我已经完成了第一部分,现在,我有一个像这样的路由器:

routes: {
    '': 'home',
    'blank': 'blank'
}

我也有这个启动App:

$(function(){
    window.App = new BackboneTunes();
    Backbone.history.start({pushState: true});
});

现在,如果我在网址栏中输入http://localhost:9292/#blank,则会将我重定向到http://localhost:9292/blank,但如果我直接输入http://localhost:9292/blank,则会显示404消息。

这是正常的还是我在这里有错误?

提前致谢。

2 个答案:

答案 0 :(得分:8)

对于那些认为上述答案不充分的人:您要做的是让您的服务器将所有网址重新路由到您的index.html页面,Backbone.js会为您处理路由。通过以下步骤,您可以在地址栏中保持URL相同的情况下执行此操作。

如果您使用Apache作为容器,则需要在应用程序的.htaccess文件中启用mod_rewrite模块。

在httpd文件中:

1)确保您的文档根目录的“覆盖”命令已启用“覆盖全部”而不是“覆盖无”

2)通过取消注释该行来启用mod_rewrite.so模块:

  

LoadModule rewrite_module modules / mod_rewrite.so

在应用程序的.htaccess文件中(如果没有,请创建一个):

1)如果你已经编写了 IfModule mod_rewrite.c 模块,那么将这些行复制到其中一个模块中:

  
    

RewriteEngine On     RewriteRule ^ / [a-zA-Z0-9] + [/]?$ / index.html [QSA,L]

  

你应该有这样的东西:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^/[a-zA-Z0-9]+[/]?$ /index.html [QSA,L]
</IfModule>

修改

注意:在Apache 2.2+中,您现在可以使用FallbackResource而不是mod_rewrite,它需要更少的行并完成同样的事情。

答案 1 :(得分:4)

您需要设置服务器以返回Backbone路由到的所有网址的相同页面。现在,它只从根URL提供页面。