3

例如,我有一个网站 domain.com。我有带有 pushstate 和 fallback 的backbone.js,当我转到 domain.com/about 时,它会加载 index.html 页面并将 pushstates 设置为 about。一切正常。但是,如果我想转到一个目录,其中有一个页面,例如:www.domain.com/bio/moreinfo,它不起作用并抛出一个无效页面。如果我在 IE 中做它工作正常。我的 htaccess 文件有以下内容:

RewriteEngine on
# html5 pushstate (history) support: 
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteRule (.*) index.html [L]
</ifModule>

如果我直接导​​航到 domain.com/bio/moreinfo 页面,它就会出错(我认为是因为我的服务器想要转到 bio 目录?或者我可能需要以不同的方式实际控制主干中的路由?它只是在 bangs 上工作所以它必须是一些奇怪的推送状态目录的东西,其中 #bio/info 与 apache 不一样 /bio/info 。感谢任何帮助。

4

1 回答 1

2

很好地使用另一个建议帖子中的答案,这是 <base href="/" /> 在 index.html 文件中做的。这实际上使我的 pushState 中的子目录起作用了!只是有人建议.. 但作为回报,它破坏了我的 IE,但我通过在我的主干初始化中添加额外的代码来修复它

 Backbone.history.start({ pushState: Modernizr.history, silent: true });
if(!Modernizr.history) {
    var rootLength = Backbone.history.options.root.length;
    var fragment = window.location.pathname.substr(rootLength);
    var search = window.location.search;
    Backbone.history.navigate('/#' + fragment + search, { trigger: true });
} else {
    Backbone.history.loadUrl(Backbone.history.getFragment())
}
于 2013-01-24T02:02:13.663 回答