2

我们正在使用主干路由、mod_rewrite、requirejs。该应用程序位于文件夹中,而不是 Web 根目录中,因此图像、css 和 js 文件需要相对文件夹引用(如果我们可以使用文件将加载的绝对文件夹)。

访问带有斜杠的路由时,除非在标头中设置了适当的基本标记,否则不会正确加载 js 和 css 文件。像这样:

<base href="//localhost/myapp/" /> 

此解决方案有效。问题是我们需要对基本标签进行变量化,以便我们可以拥有代码的开发和生产版本。但是要加载带有变量的 js 文件,如果没有基本标记,将无法工作。

只是为了确保我为骨干做了标准修复。修复可选斜杠 (/):

routes: {
  'faq(/)':'jumpToText',
  'register(/)':'jumpToForm',
},

并在历史上扎根

Backbone.history.start({pushState: true, root: "//localhost/myapp/");

该问题似乎是一个无法解决的 mod_rewrite 问题。所以最后的想法是动态设置base标签。

4

2 回答 2

2

我们最终使用 JavaScript 来解析 location.href 中的值。将此代码包装在头部的脚本标记中:

document.write("<base href="+'//'+document.location.host +'/'+ location.href.split('/')[3]+'/'+" />");

并在 routes.js 中做了同样的事情(解析出 uri)

Backbone.history.start({pushState: true, root: "/"+location.href.split('/')[3]});
于 2013-12-01T03:27:58.557 回答
1

我必须考虑协议/主机/端口的工作解决方案如下

var base = document.createElement('base');
base.href = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
document.getElementsByTagName('head')[0].appendChild(base);

这目前在包括 IE11 在内的所有主要浏览器中都可以正常工作(不支持 window.location.origin)

我已经用它制作了一个 npm 包,如果有人感兴趣,它还支持在这个基本 href 的末尾添加一个后缀

https://www.npmjs.com/package/dynamic-base

https://github.com/codymikol/dynamic-base

于 2019-09-12T15:55:06.593 回答