在处理主干路由时,我遇到了一个特殊的问题。
我们的应用程序托管在 中example.com/photo/index.php
,我们想在其上挂钩一个事件,该事件在触发时会在地址栏中显示为example.com/photo/<ID>
. 下面是我们如何设置重写规则和路由器设置:
RewriteRule ^/photo/([0-9]+)?$ /photo/index.php/photo/$1 [L]
Backbone.Router.extend 内部:
routes: {
'photo/:ID': 'viewPhoto'
},
路由器实例化后:
$(function() {
Backbone.history.start({
pushState: 'pushState' in window.history,
root: '/'
});
});
这在 Firefox/Chrome/Safari 中效果很好,但在 IE9 中,您必须使用 访问事件挂钩example.com/photo/#photo/<ID>
,这不是很酷。
所以我们尝试在 ( ) 上切换 pushState 选项pushState: true
,希望它能有所帮助,但现在example.com/photo/<ID>
在 IE9 中访问时,页面将被重定向到example.com/#photo/<ID>
,并实际显示example.com/index.php
.
我想(?)如果我们将事件挂钩 URL 更改为类似的东西,这可能不是问题example.com/photo/view/<ID>
,但是我们不能触及那部分。
无论如何,无论有没有 pushState example.com/photo/<ID>
,example.com/#photo/<ID>
是否可以example.com/photo/#<ID>
在 IE9 下按预期工作?