将nginx 404重定向到角度路由/#/ 404

时间:2015-09-02 02:08:52

标签: angularjs redirect nginx

我有一个使用angular-ui $stateProvider$urlRouterProver的角度应用。

我的角度路由器会相应地重定向到我的404状态;

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

此404的最终网址看起来像http://<snip>.com/#/404。这非常有效,它处理了与/#/whatever/missing/匹配的错误网址,但它没有覆盖/wrong/url/

根404由nginx&#39; s 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状态(并且不会更改网址)。

1 个答案:

答案 0 :(得分:1)

在仔细阅读并仔细阅读文档后,我们可以直接使用error_page重定向。我的nginx解决方案看起来像这样:

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

我不太喜欢重定向解决方案,但它似乎没有用后退按钮打破任何东西,所以我对它没问题。 :)