You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular 1.6中使用$state将错误URL重定向至404页面

在Angular 1.6中用$state服务重定向错误URL到404页面的实现方法

嘿,我刚好在Angular 1.6项目里处理过这个需求,结合你已经定义好的404状态,这就给你说清楚怎么实现:

核心思路:用$urlRouterProvider的兜底规则触发$state跳转

AngularJS的路由系统里,$urlRouterProvider负责处理URL的匹配和重定向,我们可以用它的otherwise方法来捕获所有未匹配到已定义路由的请求,然后通过$state服务跳转到你已经配置好的404状态。

具体代码实现

在你的路由配置模块(通常是.config块)里,注入$stateProvider和$urlRouterProvider,先保留你已有的404状态配置,再添加兜底重定向规则:

angular.module('你的应用模块名')
  .config(function($stateProvider, $urlRouterProvider) {
    // 你已定义的404状态(原样保留)
    $stateProvider.state('404', {
      url: '/404',
      template: '<page-404></page-404>',
      ncyBreadcrumb: { label: '404' },
      data: {requiredLogin: false}
    });

    // 配置未匹配URL的兜底重定向
    $urlRouterProvider.otherwise(function($injector) {
      // 因为在.config块里不能直接注入$state,所以用$injector来获取
      var $state = $injector.get('$state');
      // 跳转到已定义的404状态
      $state.go('404');
    });
  });

为什么不用直接写otherwise('/404')?

如果你直接写$urlRouterProvider.otherwise('/404'),虽然也能显示404页面,但不会触发$state的完整状态切换逻辑——比如你配置的ncyBreadcrumb标签更新、data.requiredLogin的权限判断这些都不会生效。用$state.go('404')能完整触发状态的生命周期,完美适配你已有的404状态配置。

可选:排除特定URL不重定向

如果你的应用里有一些特殊URL(比如后端API接口)不想被重定向到404,可以在otherwise的回调里做判断:

$urlRouterProvider.otherwise(function($injector, $location) {
  var $state = $injector.get('$state');
  var currentPath = $location.path();
  
  // 比如排除所有/api开头的路径,交给后端处理
  if (currentPath.startsWith('/api')) {
    return currentPath; // 返回原路径,不做重定向
  }
  
  // 其他未匹配路径跳转到404
  $state.go('404');
});

这样配置完成后,所有用户访问的未定义URL都会被自动重定向到你设置的404页面啦!

内容的提问来源于stack exchange,提问作者snuuve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:22:14