javascript - Backbone.js pushState 不工作并给出 404 错误

标签 javascript backbone.js

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

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

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 消息。

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

提前致谢。

最佳答案

对于那些认为上述答案不够充分的人:您要做的是让您的服务器将所有 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,它需要更少的行并完成相同的事情。

关于javascript - Backbone.js pushState 不工作并给出 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531603/

相关文章:

javascript - 如何使用 jQuery 通过 ajax 调用传递隐藏值?

Javascript Alexa 函数在接受用户输入时返回 [object Object]

javascript - 如何创建泛型类型别名?

javascript - CSS 选择器相当于backbone.js 中的jQuery.find?

javascript - 在 Backbone.js 中获取 URL 片段而不是哈希

javascript - 在正则表达式中执行 "multiple passes"的优雅方法?或者让我的正则表达式更聪明?

javascript - Backbone.js 模板示例

javascript - 遍历 Backbone 集合

javascript - 使用 requirejs amd shim 加载 soundmanager2,日志未定义

javascript - 使用 Javascript 在点击时隐藏和显示 <ul> 和 <li>