Ember路由非根域

  • 本文关键字:路由 Ember ember.js
  • 更新时间 :
  • 英文 :


我正在使用ember快速入门教程应用程序。在本地一切都很好,但当部署到测试环境中时,应用程序会加载所有资源。

我被部署到某个地方的子文件夹,显然ember正试图在根域中找到它,而不是子文件夹

示例:http://example.com/embertest/index.html资产文件夹显然位于http://example.com/embertest/assets/,但在装载时,它正试图从http://example.com/assets/不存在

在这种情况下,我如何让ember使用相对路径?

更新1

经过一些谷歌搜索,我尝试编辑environment.js ENV.baseURL属性在if(environment === 'production')块中,我添加了ENV.baseURL = '/website/dist/';,很明显,我使用的是ember构建——env生产

当我直接去一条路线时,我得到了同样的404,但现在在index.html、Uncaught UnrecognizedURLError: /index.html 上也得到了一个错误

我尝试了"/website/dist/"、"website/dist"、"/webite/dist"以及的所有组合

更新2

我现在也尝试在prod构建后手动编辑index.html中的<base href="/website/dist/">。与更新1 相同的错误

您需要明白,不能只将ember应用程序放在普通的Web服务器文件夹中。当您更改路由时,Ember使用历史API来更改URL,但当直接获取时,它无法控制web服务器部署的内容。

因此,如果您的成员index.html位于http://example.com/app/index.html上,则您的web服务器通常只会在打开http://example.com/app/http://example.com/app/index.html时部署此文件。但对于路由foo,您的url是http://example.com/app/foo,并且您的web服务器正在寻找一个不存在的直接foo。因此,如果您没有请求其他现有资源(如图像、js或css文件),您必须配置web服务器,使其始终使用index.html进行响应!

如何做到这一点完全取决于您的网络服务器。

您还必须注意,您应该在一个完整的根相对路径中输入您的资产,并指定rootURL,这样您的路由器就知道URL的哪一部分是您的路径,以及您的路由从哪里开始。

您不应该使用baseURL,因为它即将被弃用!

你真的应该看看这篇全新的博客文章!

使用ENV.locationType = 'hash'来阻止使用历史API仍然是一个选项,但显然是一个丑陋的选项。

好的,所以我通过在environment.js中更改ENV.locationType = 'hash'解决了这个问题我仍然希望能解释一下发生了什么,因为这感觉有点古怪。。。

最新更新