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】:很好地使用另一个建议帖子中的答案,这是要做的
<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())
【讨论】:
以上是关于Backbone.js PushState 路由 .htaccess 仅作为散列工作,但无处可去的主要内容,如果未能解决你的问题,请参考以下文章