Vue3中使用History模式引发刷新页面出现404的问题

在Vue3中,使用history模式的路由会导致刷新时可能出现404错误。为解决此问题,需配置将所有未匹配的请求重定向到index.html。在nginx配置文件中,可以设置try_files指令确保找不到资源时返回index.html。同时,在VueRouter的配置里,应添加一个通配符路由来处理未定义的路径,展示404页面。
摘要由CSDN通过智能技术生成

在vue3中的路由中,路由间的跳转是不刷新浏览器的,也就是用ajax来请求后端接口对组件进行增量更新,hash模式中#后面的路径都不会直接发送给后端,都是前端自己在玩,但是路径中有'#'不利于seo优化而且也不美观,一旦在history模式下刷新浏览器,就会相当于直接请求后端中对应uri的controller,这时大概率是请求不到任何数据的,从而报404错误.

我就想用history模式,应该如何解决此问题呢

在vue-router4的官方文档中提到了此问题https://router.vuejs.org/zh/guide/essentials/history-mode.html,以如下方式创建一个h5中history模式的路由,这时我们只需要配置,一切刷新浏览器的行为如果匹配不到内容,全部重定向到首页index.html上,如果 URL 不匹配任何静态资源,它应提供与你的应用程序中的 index.html 相同的页面.

这是你的路由,它位于src/router/index

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    //...
  ],
})

如果你使用的是nginx,可以在nginx的config配置文件中添加如下配置

location / {
  //root   如果你配置了此选项,try_files时就会拼接上root对应的地址
  index index.html    //如果你的代码严格遵循文件夹下的默认文件是index.html,此选项可不写
  try_files $uri $uri/ /index.html;
}

解释一下,index选项是用于配置路径下默认的文件名称,try_files是依次检查能否匹配得上对应的文件,一旦匹配上就返回,后面的就不看了,如果均没有匹配上,就会返回最后一个文件

比如我的地址栏中的地址是: http://localhost:3004/api/home/user/name

那么$uri就是/api/home/user/name,所以try_files会依次检查后端的接口能否匹配得上/api/home/user/name, /api/home/user/name/index.html,如果都匹配不到,则重定向到

http://localhost:3004/index.html

一个注意的问题:

既然所有找不到路由的请求都返回index.html,那真正404的请求就不会显示404了。

要在src/router/index.js的 routes:[]的末尾添加如下配置:

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    //...此处是你自己配置的路由

    {
      path: '*',            //其他路由显示404
      component: NotFound,    //你的404组件
    }

  ],
})
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值