将 nginx 404 重定向到 angular 路由 /#/404
Redirect nginx 404 to angular route /#/404
我有一个 angular 应用程序,它使用 angular-ui $stateProvider
和 $urlRouterProver
。
我的 angular 路由器相应地重定向到我的 404 状态;
$urlRouterProvider.when('', '/').otherwise('404');
$stateProvider.state('404', {
url: '/404',
templateUrl: 'partials/404.html',
controller: 'PageCtrl'
});
此 404 的最终 url 看起来像 http://<snip>.com/#/404
。这工作得很好,它处理错误的 urls 匹配 /#/whatever/missing/
但它没有覆盖 /wrong/url/
.
Root 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"
并且它不会重定向到 angular 的 404 状态(并且不会更改 url)。
仔细研究和阅读文档后,我们可以直接使用带有 error_page 的重定向。我的 nginx 解决方案如下所示:
location / {
root /var/www/<nip>.com/public/;
error_page 404 =301 http://<snip>.com/#/404;
}
我不太喜欢重定向解决方案,但它似乎不会破坏后退按钮的任何内容,所以我可以接受。 :)
我有一个 angular 应用程序,它使用 angular-ui $stateProvider
和 $urlRouterProver
。
我的 angular 路由器相应地重定向到我的 404 状态;
$urlRouterProvider.when('', '/').otherwise('404');
$stateProvider.state('404', {
url: '/404',
templateUrl: 'partials/404.html',
controller: 'PageCtrl'
});
此 404 的最终 url 看起来像 http://<snip>.com/#/404
。这工作得很好,它处理错误的 urls 匹配 /#/whatever/missing/
但它没有覆盖 /wrong/url/
.
Root 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"
并且它不会重定向到 angular 的 404 状态(并且不会更改 url)。
仔细研究和阅读文档后,我们可以直接使用带有 error_page 的重定向。我的 nginx 解决方案如下所示:
location / {
root /var/www/<nip>.com/public/;
error_page 404 =301 http://<snip>.com/#/404;
}
我不太喜欢重定向解决方案,但它似乎不会破坏后退按钮的任何内容,所以我可以接受。 :)