如何处理 404 页面?Vue Router 中配置通配符路由的方式?

VIP/
在 Vue Router 中处理 404 页面(即“未找到”页面)的核心思路是:创建一个专门的组件,并利用通配符路由捕获所有未匹配的路径,将其指向该组件。
由于 Vue Router 的版本(v3 对应 Vue 2,v4 对应 Vue 3)在通配符语法上有所不同,请根据你的项目版本选择对应的配置方式。

1. 核心步骤概览

无论哪个版本,处理流程通常包含以下三步:
  1. 创建 404 组件:编写一个视图组件(如 NotFound.vue),展示友好的错误提示。
  2. 配置通配符路由:在路由配置文件中添加一条特殊的路由规则,用于匹配所有未知路径。
  3. 确保顺序正确必须将通配符路由放在路由数组的最后,因为 Vue Router 是按顺序匹配的,如果放在前面会拦截所有正常路由。

2. Vue Router 4 (适用于 Vue 3)

在 Vue Router 4 中,旧的 * 通配符已被移除,取而代之的是带正则参数的动态路由

A. 创建组件 (src/views/NotFound.vue)

vue

编辑
1<template>
2  <div class="not-found">
3    <h1>404 - 页面未找到</h1>
4    <p>抱歉,您访问的页面不存在。</p>
5    <router-link to="/">返回首页</router-link>
6  </div>
7</template>
8
9<script setup>
10// Vue 3 Composition API
11</script>
12
13<style scoped>
14.not-found {
15  text-align: center;
16  padding: 50px;
17}
18</style>

B. 配置路由 (src/router/index.js)

使用 /:pathMatch(.*)* 语法。这里的 :pathMatch 是参数名(可自定义),(.*) 是正则表达式(匹配任意字符),最后的 * 表示该参数是可重复的(匹配多级路径)。
javascript

编辑
1import { createRouter, createWebHistory } from 'vue-router'
2import NotFound from '../views/NotFound.vue'
3import Home from '../views/Home.vue'
4
5const routes = [
6  {
7    path: '/',
8    name: 'Home',
9    component: Home
10  },
11  // ... 其他具体路由 ...
12
13  // 404 通配符路由 (必须放在最后)
14  {
15    path: '/:pathMatch(.*)*',
16    name: 'NotFound',
17    component: NotFound
18  }
19]
20
21const router = createRouter({
22  history: createWebHistory(),
23  routes
24})
25
26export default router
注意:如果你希望在 404 页面中获取用户尝试访问的原始路径,可以在组件中通过 useRoute() 获取 pathMatch 参数。
javascript

编辑
1import { useRoute } from 'vue-router'
2const route = useRoute()
3console.log(route.params.pathMatch) // 例如访问 /abc/def,这里得到 ['abc', 'def']

3. Vue Router 3 (适用于 Vue 2)

在 Vue Router 3 中,直接使用星号 * 作为通配符。

A. 创建组件 (src/views/NotFound.vue)

(代码结构同 Vue 3,只是 script 部分可能使用 Options API)

B. 配置路由 (src/router/index.js)

javascript

编辑
1import Vue from 'vue'
2import Router from 'vue-router'
3import NotFound from '@/views/NotFound.vue'
4import Home from '@/views/Home.vue'
5
6Vue.use(Router)
7
8const routes = [
9  {
10    path: '/',
11    name: 'Home',
12    component: Home
13  },
14  // ... 其他具体路由 ...
15
16  // 404 通配符路由 (必须放在最后)
17  {
18    path: '*', 
19    component: NotFound
20  }
21]
22
23export default new Router({
24  mode: 'history', // 或 'hash'
25  routes
26})

4. 进阶技巧与常见问题

Q1: 如何重定向而不是显示组件?

如果你不想显示 404 页面,而是想强制跳转到首页,可以使用 redirect 属性。
  • Vue Router 4:
    javascript

    编辑
    1{
    2  path: '/:pathMatch(.*)*',
    3  redirect: '/'
    4}
  • Vue Router 3:
    javascript

    编辑
    1{
    2  path: '*',
    3  redirect: '/'
    4}

Q2: 为什么刷新页面会出现真正的 404 (Nginx/Apache 报错)?

如果你使用的是 history 模式(URL 没有 #),当用户直接访问一个不存在的 URL(如 yoursite.com/abc)并刷新时,浏览器会向服务器请求 /abc 资源。如果服务器没有配置重写规则,服务器会返回 404。
解决方案:需要在服务器端配置“ fallback ”,将所有找不到文件的请求都指向 index.html,让 Vue Router 在客户端接管并显示你的 404 组件。
  • Nginx 配置示例:
    nginx

    编辑
    1location / {
    2  try_files $uri $uri/ /index.html;
    3}
  • Vite/Webpack 开发服务器: 通常默认已处理,但生产环境部署务必检查服务器配置。

Q3: 通配符路由导致嵌套路由失效?

如果在父路由下使用了通配符,可能会捕获子路由。确保通配符路由定义在层级结构的正确位置,或者在父路由内部单独处理。通常建议将全局 404 路由定义在根级别路由数组的末尾。

总结

  • Vue 3: 使用 path: '/:pathMatch(.*)*'
  • Vue 2: 使用 path: '*'
  • 关键点: 永远把它放在 routes 数组的最后一位

购买须知/免责声明
1.本文部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
2.若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
3.如果本站有侵犯、不妥之处的资源,请在网站右边客服联系我们。将会第一时间解决!
4.本站所有内容均由互联网收集整理、网友上传,仅供大家参考、学习,不存在任何商业目的与商业用途。
5.本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
6.不保证任何源码框架的完整性。
7.侵权联系邮箱:188773464@qq.com
8.若您最终确认购买,则视为您100%认同并接受以上所述全部内容。

海外源码网 源码资讯 如何处理 404 页面?Vue Router 中配置通配符路由的方式? https://moyy.us/21839.html

相关文章

猜你喜欢