Nginx使用vite部署vue3项目 页面刷新404

news/2024/7/10 0:16:22 标签: nginx, 前端, vue

1 问题描述

最近使用vue3的vite构建了一个新项目,在本地测试时是好好的没有什么问题,但是一发到服务器上刷新页面就会出现404,这样肯定会导致用户体验非常不好,于是我开始翻阅资料,找到几种处理方法

2 原因分析

出现这种情况应该是页面刷新没有找到根路径导致的

3 处理方法

3.1 方法一 使用webHashHsitory

修改router 文件夹下的index 配置文件,将history 方式改为createWebHashHistory ;因为hash方式的页面地址在刷新时只会刷新# 后面的内容,前面会保持不变

import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const router = createRouter({
  // 引入正式环境的打包路径
  history: createWebHashHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomeView
    },
  ]
})

export default router

3.2 方法二 修改配置文件

因为我的项目需求,无法使用hash 的方式来解决这个问题,于是只能依然采用H5的history 方式

  • 首先在.env.production 配置文件中配置打包后的起始路径(一般默认路径是 / 可以根据自己的需求配置不同的起始路径)

    # 资源访问路径
    VITE_BASE_PUBLIC_PATH = "/page/hr"
    
  • vite.config.ts 文件中加载打包路径

    import { fileURLToPath, URL } from "node:url";
    
    import { defineConfig, loadEnv } from "vite";
    import vue from "@vitejs/plugin-vue";
    import { ConfigEnv } from "vite";
    import path from "node:path";
    
    // https://vitejs.dev/config/
    export default ({ mode }: ConfigEnv) => {
      // 获取当前环境的资源访问路径
      const basePublicPath: string = loadEnv(
        mode,
        process.cwd()
      ).VITE_BASE_PUBLIC_PATH;
    
      return defineConfig({
        base: basePublicPath,	// 加载打包路径
        plugins: [
          vue(),
        ],
        resolve: {
          alias: {
            "@": fileURLToPath(new URL("./src", import.meta.url)),
          },
        },
      });
    };
    
    
  • 修改服务器上的 nginx.conf 文件

    # HR页面
    location /page/hr{
        alias /page/ez_hr/;
        index index.html;
      # 重点 设置刷新的起始路径,避免出现找不到根路径从而404的问题
        try_files $uri $uri/ /page/hr/index.html;	
    }
    
  • 最后也是最重要的一步,重启 nginx 服务!!直接热启动不一定生效(反正我的没生效)

3.3 升级版本(待验证)

  • 我在stackflow上看到一个说法是 vite 打包本来就有这个问题,但是在 5.0.0-beta.0 这个版本中问题已经修复了,但我用第二种方式已经解决了,这个就没试,有兴趣的朋友可以试一试

http://www.niftyadmin.cn/n/4999493.html

相关文章

Spring Boot + Vue的网上商城之登陆认证

Spring Boot Vue的网上商城之登陆认证 本篇博客介绍了如何使用Spring Boot和Vue来实现网上商城的登陆认证功能。下面是本文的主要内容总结: 后端实现: 创建Spring Boot项目,并添加Spring Security和Spring Web的依赖。配置Spring Security&…

英语语法基础知识

简单句 主谓 主语 谓语,比如:Spring comes,这句话中主语是spring ,谓语是comes 。 主语就是引领句子的开头部分,是一个句子的主体,英文是subject ,我们用字母S代替。谓语可以理解为动词&…

【Python】应用:Python数据分析基础

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Python数据分析基础。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次…

微服务之架构演变

随着互联网的发展,网站应用规模不断扩大,网站架构随之不断演变,演变历史大致分为单体应用架构-垂直应用架构-分布式架构-SOA架构-微服务架构-云原生架构 架构演变 单体应用架构 以前网站流量小,只需要一个应用就可以把所有功能…

mysql-1:认识mysql

文章目录 数据库概述什么是数据库什么是关系型数据库 MySQL的概述MySQL是什么MySQL发展历程 SQL的概述什么是SQLSQL发展的简要历史:SQL语言分类 数据库概述 什么是数据库 数据库就是[存储数据的仓库],其本质是一个[文件系统],数据按照特定的…

2023年MySQL-8.0.34保姆级安装教程

重点放前面:演示环境为windows环境。 MySQL社区版本安装教程如下: 一、MySQL安装包下载二、安装配置设置三、配置环境变量 大体分为3个步骤:①安装包的下载;②安装配置设置;③配置环境变量 一、MySQL安装包下载 下载官…

设计模式-10--多例模式(Multition pattern)

一、什么是多例模式(Multition pattern) 多例模式(Multition pattern)是单例模式的一种扩展,它属于对象创建类型的设计模式。在多例模式中,一个类可以有多个实例,并且这些实例都是该类本身。因…

重大工程建造云服务平台源码 SpringCloud+Vue

技术架构: 微服务JavaSpring Cloud VueUniApp MySql 开发语言:Java 开发工具:Idea 前端框架:Vue 后端框架:Spring Cloud 数 据 库:MySql 移 动 端:UniApp 系统端口:PC端&…