2015-09-02 56 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; 
} 

我不喜欢重定向解决方案很多,但它似乎并没有打破与后退按钮什么,所以我确定它。 :)