2015-10-26 52 views
0

在我的Ember应用程序中,如果我正在本地开发,那么可以直接转至网址http://localhost:4200/some/page。我也可以导航到应用程序本身的页面。Ember应用程序在特定URL中输入时呈现空白页面

但是,我的应用程序部署后,我去https://dev.myapp.com我能够浏览网站很好,但如果我试图直接去一个URL(如https://dev.myapp.com/some/page)没有任何呈现在浏览器和DOM完全是空的。但是如果我输入https://dev.myapp.com/回到浏览器中,我可以再次开始浏览应用程序。

这是否与我如何构建或部署我的应用程序有关?或者这是我可能在Ember应用程序本身中配置错误的东西?

我还应该补充说我使用Nginx来部署我的应用程序。

回答

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> 

老灰烬应用套件文档有more examples在页面底部。

+0

这与使用“index index.html index.htm”类似吗?与nginx?这是来自ember-cli网站 – Scott

+0

或者它是“try_files $ uri $ uri//index.html?/$request_uri;”这行吗? – Scott

+0

我对nginx并不熟悉,但我相信这确实是最重要的一行。它指定了尝试访问特定资源的顺序,请参阅[相应的nginx文档](http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files)以获取更多信息。如果它不能作为实际存在的文件或目录进行访问,它将回退到index.html,Ember在这里做了魔术,解析URI并转换到相应的路由。 – digitalbreed

相关问题