2015-10-26 31 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