Ember路由非根域

时间:2016-05-06 11:00:36

标签: ember.js

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

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

实施例: http://example.com/embertest/index.html 资产文件夹显然位于http://example.com/embertest/assets/下,但在加载时,它会尝试从http://example.com/assets/抓取它,但不存在

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

更新1

经过一些谷歌搜索后,我尝试编辑environment.js ENV.baseURL属性 在if(environment === 'production')块中我添加了ENV.baseURL = '/website/dist/';,显然我正在构建使用ember build --env production

直接前往路线时我得到的是404,但现在也在index.html上遇到错误,Uncaught UnrecognizedURLError: /index.html

我尝试了'/ website / dist /','website / dist /','/ website / dist'的每一个组合

更新2

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

2 个答案:

答案 0 :(得分:1)

您需要了解您不能将ember应用程序放到普通的Web服务器文件夹中。当您进行路径更改时,Ember使用历史记录API更改URL,但它无法控制Web服务器在直接获取时部署的内容。

因此,您在index.html http://example.com/app/index.html上拥有您的余烬{}}您的网络服务器通常只会在您打开http://example.com/app/http://example.com/app/index.html时部署此文件。但对于路由foo,您的网址为http://example.com/app/foo,您的网络服务器正在寻找不存在的直接foo。因此,如果您没有请求其他现有资源(如图像,js或css文件),则必须配置您的Web服务器,以便它始终响应您的index.html

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

您还必须注意,您应该在完全根相对路径中输入资产并指定rootURL,以便您的路由器知道网址的哪一部分是您的路径以及您的路由开始位置。

你应该使用baseURL,因为它即将弃用!

你真的应该读这个really new blog post

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

答案 1 :(得分:0)

好的,我通过更改environment.js中的ENV.locationType = 'hash'解决了这个问题 仍然会喜欢对正在发生的事情做出解释,因为这感觉有点笨拙......