2011-09-23 47 views
2

我一直在观看Backbone.js上的PeepCode的截屏视频,并且已经完成了它的编码。Backbone.js pushState不起作用,并提供404错误

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

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

而且我有这个启动应用程序:现在

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

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

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

在此先感谢。

回答

4

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

+0

它工作完美。 –

+0

我遇到同样的问题。我是否需要创建我的服务器上路由的整个结构,但空文件? –

8

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

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

里面你的httpd文件:

1)请确保您的文档根目录的“替换”命令,启用“覆盖所有”,而不是“覆盖无”

2)启用了mod_rewrite。所以模块通过取消注释这一行:

的LoadModule rewrite_module模块/ mod_rewrite.so

内,您的申请ication的.htaccess文件(如果你没有一个,创建一个):

1)如果你有一个IfModule mod_rewrite.c模块已经写好,然后将这些行复制到一个模块中:

RewriteEngine叙述在
重写规则^/[A-ZA-Z0-9] + [/]?$ /index.html [QSA,L]

你应该有一些看起来LIK E本:

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

编辑

注:在Apache中2.2+,您现在可以使用FallbackResource代替mod_rewrite的,它需要较少的线路和完成同样的事情。