2015-09-02 75 views
1

我有一個角度應用程序,它使用angular-ui$stateProvider$urlRouterProver將nginx 404重定向到角路由/#/ 404

我的角度路由器相應地重定向到我的404狀態;

$urlRouterProvider.when('', '/').otherwise('404'); 
$stateProvider.state('404', { 
    url: '/404', 
    templateUrl: 'partials/404.html', 
    controller: 'PageCtrl' 
}); 

此404的最終url看起來像http://<snip>.com/#/404。這工作得很好,它處理與/#/whatever/missing/匹配的錯誤網址,但它不包含/wrong/url/

根404由nginx的error_page處理。我嘗試了一些與error_page 404的組合;

error_page 404 /#/404; 
location = /#/404 { 
    root /var/www/<snip>.com/public/; 
    internal; 
} 

nginx的日誌輸出:

[error] open() "/var/www/<snip>.com/public/#/404" failed (2: No such file or directory), request: "GET/HTTP/1.1" 

,它不是重定向到角的404的狀態(並且不改變URL)。

回答

1

仔細閱讀文檔並仔細閱讀文檔後,我們可以直接使用error_page重定向。我的nginx的解決方案是這樣的:

location/{ 
    root /var/www/<nip>.com/public/; 
    error_page 404 =301 http://<snip>.com/#/404; 
} 

我不喜歡重定向解決方案很多,但它似乎並沒有打破與後退按鈕什麼,所以我確定它。 :)