Backbone.js PushState 路由 .htaccess 仅作为散列工作,但无处可去

Posted

技术标签:

【中文标题】Backbone.js PushState 路由 .htaccess 仅作为散列工作,但无处可去【英文标题】:Backbone.js PushState routes .htaccess only working as hash but nowhere else 【发布时间】:2013-01-07 03:08:15 【问题描述】:

例如,我有一个网站 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 目录?或者我可能需要以不同的方式实际控制主干中的路由?只是它适用于刘海,所以它必须是一些奇怪的推送状态目录的东西,其中 #bio/info 与 apache 不一样 /bio/info 。感谢任何帮助。

【问题讨论】:

昨天有一个人遇到了同样的问题,除了他正在处理所有 IE。恭喜,你有一个工作路由器。 ***.com/questions/14469467/… 【参考方案1】:

很好地使用另一个建议帖子中的答案,这是要做的 &lt;base href="/" /&gt; 在 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())

【讨论】:

以上是关于Backbone.js PushState 路由 .htaccess 仅作为散列工作,但无处可去的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 pushState 在 Backbone 中使用 SEO 友好的 URL?

Backbone.js:查看状态和路由

Backbone.js:未达到路由器回调

backbone.js实战之导航控制器学习笔记

Backbone.js URL 路由

使用 Jasmine 监视 Backbone.js 路由调用