【问题记录】解决vite多页应用路由改用history之后本地刷新404问题

news/2024/7/10 2:06:39 标签: vite, vue, 路由模式, history模式, 前端

当前包的版本信息:

"vue": "^2.7.14",

"vue-router": "^3.6.5"

"vite": "^3.0.7",

首先,修改路由模式

首先,将之前多页项目中的某个页面路由模式改用 history ,并且根据官方文档设置对应的 base 属性:

mode: 'history',

base: '/pageA.html',

代码块如下:

return new VueRouter({
  mode: 'history',
  base: '/pageA.html',
  routes: [{
    path: '/',
    component: Home,
  },{
    path: '/hello',
    component: Hello,
  }]
});

问题一:

当前项目是一个多页应用配置,将路由从默认的hash模式改为history模式之后。

访问 ​ http://localhost:8128/pageA.html 正常,页面内跳转 ​ http://localhost:8128/pageA.html/hello 也正常,但是刷新 ​ http://localhost:8128/pageA.html/hello 时会报错 404

解决(第一步):

404报错就如字面意思,没找着,放到生产环境上我们都知道路由模式改用history时需要服务端做一层nginx的重定向。

nginx的重定向的工作目的:请求次级页面的路由全都指向期望的根目录,单页应用一般都指向 index.html,多页应用例如上文中的案例,就应该指向到 pageA.html. 

以该例说明,当发起页面请求时, http://localhost:8128/pageA.html/hello 应该指向  http://localhost:8128/pageA.html 的服务器地址,而不是真的去访问 hello 这个地址去。

所以,对应本地开发环境我们也需要做一层代理。

在 vite.config.ts 文件中设置 proxy 如下:

server: {
  host: 'localhost',
  port: 8128,
  proxy: {
    '/pageA.html/': {
      target: 'http://localhost:8128',
      rewrite: () => '/pageA.html',
    },
}

问题二:

404问题解决完之后,页面仍旧空白,控制台 Network 显示 main.ts 资源加载失败(有一个新的 404来了)

打开报错详情可以看到资源请求路径不对!

解决(第二步):

直接去看下代码中请求这个资源的写法大致能猜到可能是 相对路径、绝对路径 这种问题了。

 

因为之前是hash模式 ,现在改用history模式之后,此处的相对路径需要改成绝对路径,正确写法:

最后,刷新验证

修复成功 √

关键文档:

HTML5 History 模式 | Vue Router

API 参考 | Vue Router

开发服务器选项 | Vite 官方中文文档


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

相关文章

EWM是什么,需要了解什么

EWM是SAP的一个模块,代表扩展仓库管理(Extended Warehouse Management),是SAP企业资源计划(ERP)的一部分。它提供了一个完整的、高级的仓库管理解决方案,支持企业在全球范围内的仓库管理、订单管…

Spring Security 6.x 系列【50】授权服务器篇之Spring Boot 3.1自动配置

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.10 本系列Spring Security 版本 6.1.0 本系列Spring Authorization Serve 版本 1.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 前言2. 自动配置2.1 OAut…

KNN算法简介以及KNN的简单实现和应用

KNN算法是一种常见的机器学习算法,它可以用于分类和回归问题。KNN算法的核心思想是通过计算样本之间的距离来确定新样本的类别或数值。在本文中,我们将详细介绍KNN算法的原理、应用和优缺点。 一、KNN算法的原理 KNN算法的全称是K-Nearest Neighbor算法…

java面向对象学习

一、Java类及类的成员 1.类是对一类事物的描述,是抽象的、概念上的定义 2.对象是实际存在的该类事物的每个个体,因而也称为实例 3.属性:对应类中的成员变量 4.行为:对应类中的方法 权限修饰符号:public、protected…

龙芯2K1000实战开发-PMON开发1

文章目录 概要整体架构流程技术名词解释技术细节小结概要 龙芯 2k1000 处理器的 bootloader 有 pmon 和 uboot,本文以PMON为例,结合项目实际平台,设计对应的PMON程序。 龙芯启动流程 总体启动流程概述 start --→initmips --->main; PMON 的启动可以分为三个阶段: 首…

分享一组真实的按钮

先看效果图&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>发光的按钮</title><style>* {border: 0;box-sizing: border-box;margin: 0;padding: 0;…

2.java容器、多线程、JVM、类加载总结

Java基础知识 文章目录 Java基础知识一、容器&队列&栈1、List 容器ImmutableList&#xff1a;不可变列表&#xff0c;任何的 remove&#xff0c;add 方法都会抛出异常。2、Map 容器3、Queue 队列4、Set 容器5、Stack 栈 二、多线程1、线程管理2、同步器3、信号量4、并发…

如何在 Python 中读取 .data 文件?

什么是 .data 文件&#xff1f; 创建.data文件是为了存储信息/数据。 此格式的数据通常以逗号分隔值格式或制表符分隔值格式放置。 除此之外&#xff0c;该文件可以是二进制或文本文件格式。在这种情况下&#xff0c;我们将不得不找到另一种访问它的方式。 在本教程中&…