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

Vue-Router实现捕获所有路由:保留原URL并显示内嵌404页面

可以同时实现这两个需求,核心是不要用redirect重定向,而是直接通过路由匹配渲染对应的组件结构,这样就能保留用户输入的原始URL,同时显示内嵌的404页面。

先修正你原来路由结构里的小问题:你把/subpage作为根路由的子路由时用了绝对路径(带/),这会让它脱离父路由的层级,应该改成相对路径subpage。

调整后的路由代码如下:

const routes = [
  { 
    path: '/', 
    redirect: '/subpage' // 根路径重定向到主页面
  },
  {
    path: '/subpage',
    component: () => import('SubPage.vue'),
    children: [
      // 这里放/subpage下的有效子路由,比如:
      // { path: 'home', component: () => import('Home.vue') },
      // { path: 'settings', component: () => import('Settings.vue') },
      // 匹配/subpage下所有无效子路径
      { 
        path: ':pathMatch(.*)*', 
        name: '404',
        component: () => import('NotFound.vue')
      }
    ]
  },
  // 匹配所有非/subpage开头的无效路径
  {
    path: '/:pathMatch(.*)*',
    component: () => import('SubPage.vue'),
    children: [
      {
        path: '',
        component: () => import('NotFound.vue')
      }
    ]
  }
];

这个方案的逻辑是:

  • 当用户访问/subpage下的无效子路径(比如/subpage/abc123),通配符子路由会直接匹配,URL保持不变,同时SubPage的内嵌区域显示NotFound组件。
  • 当用户访问非/subpage开头的无效路径(比如/xyz),顶级通配符路由会渲染SubPage,并在其内嵌区域加载NotFound组件,URL完全保留用户输入的原始地址。

你之前尝试的alias之所以没生效,是因为alias是给已有路由设置替代访问路径,没法实现“任意无效URL都匹配内嵌404”的需求,直接用通配符路由渲染目标组件结构才是正确的思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:16:21