我们使用的是 Backbone.js 路由,mod_rewrite,requirejs。应用程序在一个文件夹中,而不是在web根目录中,因此需要对图像、css和js文件使用相对文件夹引用(如果我们可以使用绝对文件夹,那么这些文件将被加载)。
当访问一个带有斜杠的路由时,js和css文件都不能正确加载,除非在头文件中设置了一个合适的基本标记。
<base href="//localhost/myapp/" />
这个解决方案是可行的。问题是我们需要变量化base标签,这样我们就可以有开发和生产版本的代码。但是如果没有base标签,用变量加载一个js文件是行不通的。
为了确保我对 Backbone.js 做了标准的修复。修复可选的斜杠(/):
routes: {
'faq(/)':'jumpToText',
'register(/)':'jumpToForm',
},
并在历史上扎下根
Backbone.history.start({pushState: true, root: "//localhost/myapp/");
这个问题似乎是一个无法解决的mod_rewrite问题。所以最后的想法是动态地设置base标记。
2条答案
按热度按时间hivapdat1#
我们最终使用JavaScript来解析location.href中的值。将此代码 Package 在头部的script标记中:
并在routes.js中执行相同的操作(解析出URI)
h43kikqp2#
我必须考虑协议/主机/端口的一个有效解决方案如下
这目前在包括IE11在内的所有主流浏览器中都能正常工作(IE11不支持window.location.origin)
我已经用它制作了一个npm包,如果有人感兴趣的话,它也支持在这个基本href的末尾添加后缀
https://www.npmjs.com/package/dynamic-base
https://github.com/codymikol/dynamic-base