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

Omi*_*gar 2 javascript backbone.js

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

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

routes: {
    '': 'home',
    'blank': 'blank'
}
Run Code Online (Sandbox Code Playgroud)

我也有这个启动应用程序:

$(function(){
    window.App = new BackboneTunes();
    Backbone.history.start({pushState: true});
});
Run Code Online (Sandbox Code Playgroud)

现在,如果我在URL栏中键入http:// localhost:9292 /#blank,它会将我重定向到http:// localhost:9292/blank,但如果我直接键入http:// localhost:9292/blank,给出一条404消息.

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

提前致谢.

Ala*_*and 8

对于那些认为以上的回答是不够的:你想要做什么是使你的服务器来重新路由所有的URL到您的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,它需要更少的行并完成相同的操作.