关于 Vue3 Router history 模式部署Nginx 出现刷新404问题

缘由

最近新买一个云服务器,自己创建一个 Vue H5 项目,因为强迫看不惯 Vue Router 的 hash 模式,坚持使用 history 模式。结果都是遇到网上同样的问题。不怕你前进和后退,就怕你刷新,一刷新就报404错误。一番折腾最后还是使用 nginx 配置 location 进行通配符 匹配就解决了问题。

软件版本以及环境

以下是个人的环境以及软件版本

  • Nginx 1.18.0
  • Vue 3.3.11
  • Vue Router 4.2.5

方案详细

Vite Config 配置

使用 Vue Router 模式,还是建议设置 BASE_URL , 假设此次项目的 BASE_URL 为 webapp 修改 vite.config.js 配置 base

JavaScript 复制代码
// https://vitejs.dev/config/
export default defineConfig({
  +++++++++++++++++
  base: '/webapp',
  +++++++++++++++++
  publicDir: "public",
  assets: "src/assets",
  plugins: [
    vue(),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

Nginx 配置

找到 nginx 的配置文件 nginx.conf ,不熟悉 nginx 的同学最好复制默认配置,并且修改为 nginx.default.conf 备份一下。 找你要托管的 server 下,然后使用 location 进行匹配

nginx 复制代码
server {
    ...
    location /webapp {
           # 注意这里的 /var/html/webapp 路径需要修改成你放置在服务器项目源码的位置
           alias /var/html/webapp;
           index index.html index.htm;
           try_files $uri $uri/ /var/html/webapp/index.html;
		
           # 处理子路由
           location ~ /webapp/.+ {
               try_files $uri /webapp/index.html;
           }
    }
    ...
}

说明这里 history 的生成方式不是在源码中生成直接文件夹,而是通过 vue 路由生成的,所以使用 nginx 对二级路径进行定位会找不到项目指定的文件,这时候要通过通配的方式,只要是 路径符合 webapp 开发的路径都统一跳转到 /var/html/webapp/index.html 路径下交由 index.js 文件处理。这样就达到了处理路由的方式。

参考

关于 nginx 配置的简单了解可以参考

相关推荐
萌萌哒草头将军11 天前
😡😡😡早知道有这两个 VueRouter 增强插件,我还加什么班!🚀🚀🚀
前端·vue.js·vue-router
前端开发同学20 天前
Vue路由三体法则:query是青铜,params像王者,而props才是隐藏的降维打击!
vue-router
申小兮20 天前
Vue Router(二)
前端·vue.js·vue-router
申小兮21 天前
Vue Router
前端·vue.js·vue-router
谎言西西里1 个月前
掌握 Vue Router:构建动态单页应用的导航利器🫡
前端·vue-router
86Eric2 个月前
Vue 使用 vue-router 时,多级嵌套路由缓存问题处理
前端·vue.js·vue-router·vue 路由缓存·多级菜单缓存
小刀飘逸2 个月前
vue-router到底有什么用?(解惑篇)
vue.js·vue-router
belldeep2 个月前
vue3:初学 vue-router 路由配置
前端·javascript·vue.js·vue-router
Aphasia3112 个月前
Vue全家桶之一——Vue Router🧑🏻‍💻
前端·vue-router
剪刀石头布啊2 个月前
自动生成路(以及仿nextjs路由)、并做一个简易Element菜单
前端·vue-router