在我的Ember应用程序中,如果我在本地开发,我可以通过转到网址http://localhost:4200/some/page
直接转到页面。我也可以在应用程序内导航到该页面。
然而,在我的应用程序部署后,我转到https://dev.myapp.com
我能够在网站上导航很好但是如果我尝试直接转到网址(例如https://dev.myapp.com/some/page
),那么浏览器中没有呈现任何内容,DOM完全为空。但是,如果我将https://dev.myapp.com/
输入浏览器,我就可以再次开始浏览该应用。
这是否与我如何构建或部署我的应用程序有关,或者这可能是我在Ember应用程序中配置错误的东西?
我还应该补充说我正在使用Nginx部署我的应用程序。
答案 0 :(得分:0)
当您使用history based locations时,Ember会在导航期间修改浏览器URL,但不会向Web服务器发出实际文档GET请求。当您直接刷新并请求特定路由时,Web服务器会尝试提供相应的文件,该文件因文件不存在而失败。
无论请求哪个文件,您都必须告诉您的网络服务器始终提供index.html,然后让Ember发挥魔力。详细配置取决于您的网络服务器。
这适用于Apache 2:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
旧的Ember App Kit文档在页面底部有more examples。