当前位置: 首页 > news >正文

vue/react项目刷新页面出现404报错的原因及解决办法

Vue项目打包部署到线上后,刷新页面会提示404,下面这篇文章主要给大家介绍了关于vue/react项目刷新页面出现404报错的原因及解决办法,文中将解决的办法介绍的很详细,需要的朋友可以参考下

​​​​​​​

  • 背景
  • 解决办法
    • 法1:将vue/react路由模式由history路由改为hash路由
    • 法2:在服务器nginx配置文件里,添加如下代码,再重启nginx,刷新网页就OK了
  • 文章参考
  • 总结

    背景

    问题描述:vue/react项目,正常的页面操作跳转,不会出现404的问题,但是一旦刷新,就会出现404报错。

    产生原因:我们打开vue/react打包后生成的dist文件夹,可以看到只有一个 index.html 文件及一些静态资源,这个是因为vue/react是单页应用(SPA),只有一个index.html作为入口文件,其它的路由都是通过JS来进行跳转的。
    而网页上显示的是静态资源的绝对路径,虽然浏览器上的url变化了,但实际上服务器的静态资源是没有更改路径的,始终只有index.html这一个入口,所以刷新就会导致url上的路径和服务器上的资源不匹配,无法找到静态资源,从而报错404。(多页应用因为有多个入口文件,所以不会有这样的问题)。

    接下来我们看看服务器上的nginx配置:

  • server {// 监听80端口listen 80;// 定义你的站点名称server_name website.com;// 根据请求 URI 设置配置location / {// 站点根目录,这里为 vue 构建出来的 dist 目录root   /www/dist;// 站点初始页为index.html 或 index.htmindex  index.html index.htm;}
    }

    根据nginx配置我们可以得出,当我们在地址栏输入域名(如www.xxx.com)时,这时会打开我们 dist 目录下的 index.html 文件,然后我们再通过页面操作跳转路由进入到 www.xxx.com/login,关键在这里,当我们在 www.xxx.com/login 页执行刷新操作,nginx location 是没有相关配置的,所以就会出现 404 的情况。

  • 解决办法

    法1:将vue/react路由模式由history路由改为hash路由

    为什么hash模式下没有问题:

    hash路由的原理是onhashchange事件,hash模式下,仅hash符号之前的内容会被包含在http请求中,如www.xxx.com/#/login,hash的值为 #/login,hash值#/login虽然出现在 url中,但不会被包括在http请求中,其只会请求www.xxx.com,对服务端完全没有影响,因此改变hash不会重新加载页面,即使服务器nginx没有配置location,也不会返回404错误。

    history模式:原理是利用了h5的Interface 中的pushState()方法和replaceState()方法,它们提供了对浏览器历史记录进行修改的功能,但当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向服务器发送请求,因此history模式正常页面操作跳转路由,是不会再次发送http资源请求的。但是当刷新的时候,由于url已经改变,如www.xxx.com/login会完整地向服务器请求相关资源,所以就会造成对应路径的资源找不到,从而返回404。

    但是使用hash路由,url上会携带#号标志,且history模式的同步更新浏览器历史记录功能就没有了。

  • 法2:在服务器nginx配置文件里,添加如下代码,再重启nginx,刷新网页就OK了

  • location / {try_files $uri $uri/ @rewrites;index index.html;
    }
    location @rewrites {rewrite ^.*$ /index.html last;
    }

相关文章:

vue/react项目刷新页面出现404报错的原因及解决办法

Vue项目打包部署到线上后,刷新页面会提示404,下面这篇文章主要给大家介绍了关于vue/react项目刷新页面出现404报错的原因及解决办法,文中将解决的办法介绍的很详细,需要的朋友可以参考下 ​​​​​​​ 背景解决办法 法1:将vue/react路由模式由history路由改为has…...

黑客技术(网络安全)——如何高效学习

前言 前几天发布了一篇 网络安全(黑客)自学 没想到收到了许多人的私信想要学习网安黑客技术!却不知道从哪里开始学起!怎么学 今天给大家分享一下,很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习…...

53.MongoDB分片集群高级集群架构详解

MongoDB分片集群架构详解 为什么要使用分片 分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。 一个复制集能承载的容量和负载是有限的,遇到以下场景就需要考虑使用分片 存储容量需…...

Servlet 上下文参数

7)Servlet上下文对象:ServletContext生活中的例子:张三和李四在不远处窃窃私语,并且频繁的对着你坏笑。你肯定会跑过去问:你们俩在聊什么?注意:此处的聊什么,其实就是你在咨询他们聊天的上下文&…...

ChatGPT正在测试原生文件分析功能,DALL·E 3能P图啦!

10月29日,有部分用户在社交平台上分享,ChatGPT Plus正在测试原生文件上传、分析功能,可以通过文本问答的方式,对上传的PDF等数据文件进行提问、搜索。 例如,上传一份50页的员工手册PDF文件,然后向ChatGPT提…...

三相马达的电机故障维护

目录 电机故障维护​编辑 更换电机操作 三相电路 热继电器 今天继续小编的工作经验的分享,今天就说说遇到的问题吧,今天组立熔接机出现故障,后面部分出现了“咕噜噜”的杂声,走到后面一听是电机发出的声音。没有办法了就开始拆…...

【易售小程序项目】后端部署、Uniapp项目Web部署

文章目录 Uniapp项目Web打包部署为什么不部署小程序Web打包前对项目进行调整网站、小程序切换增加constant.js来控制常量将js绑定到main.js的全局变量中 WebSocket差异监听键盘呼出导航条打包部署 后端项目打包部署打包前准备打包部署 Uniapp项目Web打包部署 为什么不部署小程…...

prometheus监控kafka

一、前言 关于对kafka的监控,要求高的话可以使用kafka-exorter和jmx-exporter一起收集监控数据,要求不高的情况下可以使用kafka-exporter收集监控数据即可 二、部署 kafka-exporter 部署kafka-exporter,我是在k8s集群中部署的 编辑yaml文件…...

【STL】:list用法详解

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关list的使用,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结构…...

SQL Wildcards 通配符

SQL Wildcards 通配符 通配符用于替换字符串中的任何其他字符。 通配符与 SQL LIKE 运算符一起使用。在 WHERE 子句中使用LIKE运算符来搜索列中的指定模式。 有两个通配符与 LIKE 运算符一起使用: % - 百分号表示零个,一个或多个字符_ - 下…...

入门必学 | R语言for循环的常规应用

文章目录 何为判断语句在for循环中添加判断语句嵌套循环 在上一节中,我们介绍了迭代与for循环,并对for循环的结构与原理进行了深入的介绍。在这一节中,我们将分享for循环的常规应用,包括在其中加入判断语句与嵌套循环。 何为判断语…...

metaRTC集成flutter ui demo编译指南

概要 Flutter是由Google开发的开源UI工具包,用于构建跨平台应用程序,支持linux/windows/mac/android/ios等操作系统。 metaRTC新增flutter demo,支持linux/windows/mac/android/ios操作系统,此demo在ubuntu桌面环境下测试成功。…...

int怎么转成QString?

2023年10月31日,周二晚上 要将 int 类型转换为 QString,可以使用 QString::number() 方法。 下面是一个示例代码: int number 123; QString str QString::number(number);还可以在转换时指定进制,比如将整数转换为十六进制的字…...

JavaScript进阶(二十九): 走近 es6 之 new.target

文章目录 一、前言二、new.target 重写三、拓展阅读 一、前言 源码阅读过程中,发现以下语句 new.target.prototype鉴于该语法为es6所有,项目在编译过程中,控制台报Unexpected token: punc(.)错误。按照常规处理,应用babel-loade…...

JVM虚拟机:堆结构的逻辑分区

堆内存的逻辑分区 堆内存的逻辑分区如下所示: 堆内存中分为新生代和老年代,二者空间大小1:3。在新生代里面分为两类区域(eden、survivor),三个区域(eden、survivor、survivor),三个区大小比例为8:1:1。 对象存放的位置 栈 当我们new一个对象的时候,首先会将对象…...

RabbitMQ学习02

Hello World&#xff08;Java&#xff09; 1.导入依赖 <!--指定 jdk 编译版本--><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration&g…...

android中的Package安装、卸载、更新替换流程

android系统在安装&#xff0c;删除&#xff0c;替换&#xff0c;清除数据等与应用相关的动作时&#xff0c;会发出对应的Broadcast&#xff0c;上层的应用通过注册相应的广播事件来做相应的处理。 官方文档中给出了详尽的罗列&#xff1a; ACTION_PACKAGE_ADDED 一个新应用包已…...

思维训练第三课 反意疑问句

系列文章目录 文章目录 系列文章目录前言一、什么是反意疑问句二、反意疑问句的回答&#x1f49a;主系表/主谓宾&#xff08;肯定&#xff09;&#xff0c;否定提问1、一般现在时2、一般过去时3、一般将来时4、现在完成时 &#x1f49b; 主谓宾1、一般现在2、一般过去3、一般将…...

nvm安装步骤

注意事项 不要安装任何版本的node.js&#xff0c;有的话卸载干净&#xff01;注意&#xff1a;要卸载干净了&#xff01; 安装步骤&#xff1a; nvm下载 点击exe文件安装 安装目录选择&#xff1a;D:\NVM 下一步创建nodejs文件放在D:\NVM 下&#xff0c;然后一直next到最后 …...

关于比较级(内含名词比较级)

在比较级中&#xff0c;修饰形容词一般使用more 或者-er的变体&#xff0c;但是怎么修饰名词呢&#xff1f; 即&#xff0c;如果我们想表达&#xff1a;你能不能表现得更马屁精一点&#xff1f;这种针对一个具体名词的程度升级怎么表达呢&#xff1f; 使用be more of 名词的…...

新手避坑指南:在Ubuntu 20.04 ROS Noetic下搞定宇树Z1机械臂Gazebo仿真(附依赖安装全流程)

宇树Z1机械臂ROS仿真全流程避坑指南&#xff1a;从零搭建到Gazebo控制 第一次在Ubuntu 20.04上配置宇树Z1机械臂的ROS Noetic仿真环境时&#xff0c;我几乎踩遍了所有可能的坑——依赖版本冲突、编译报错、环境变量配置错误...如果你也在经历类似的痛苦&#xff0c;别担心&…...

小爱音箱音乐自由播放器:解锁无限听歌体验的完整指南

小爱音箱音乐自由播放器&#xff1a;解锁无限听歌体验的完整指南 【免费下载链接】xiaomusic 使用小爱音箱播放音乐&#xff0c;音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 你是否厌倦了音乐平台的各种限制&#xff1f;是否想…...

FastDDS XML配置实战:从HelloWorld到可配置QoS的完整迁移指南

FastDDS XML配置实战&#xff1a;从硬编码到灵活部署的工程化演进 在分布式系统开发中&#xff0c;数据分发服务(DDS)因其高效的实时通信能力被广泛应用于工业物联网、自动驾驶等领域。作为DDS规范的实现之一&#xff0c;FastDDS凭借其出色的性能和灵活性赢得了开发者青睐。本…...

使用Python轻松管理Word页脚

在日常的办公自动化中&#xff0c;处理Word文档是许多人绕不开的环节。无论是生成报告、合同&#xff0c;还是制作项目文档&#xff0c;Word都是一个不可或缺的工具。然而&#xff0c;当文档数量庞大&#xff0c;或者需要频繁更新时&#xff0c;那些看似简单的重复性任务&#…...

如何彻底解决ComfyUI-Manager安装难题:终极完整指南

如何彻底解决ComfyUI-Manager安装难题&#xff1a;终极完整指南 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custom …...

5G NR实战:LDPC与Polar编码在真实场景中的选择与优化技巧

5G NR实战&#xff1a;LDPC与Polar编码在真实场景中的选择与优化技巧 当你在基站调试现场遇到突发的大流量视频传输需求&#xff0c;或是需要为工业自动化设备配置毫秒级响应的控制信道时&#xff0c;编码方案的选择往往决定着整个通信系统的成败。LDPC和Polar这对5G NR的"…...

Pixel Script Temple 数学建模辅助:将MATLAB算法思路转换为Python代码

Pixel Script Temple 数学建模辅助&#xff1a;将MATLAB算法思路转换为Python代码 1. 为什么需要MATLAB到Python的代码转换 在科研和工程领域&#xff0c;MATLAB长期以来一直是数学建模和科学计算的首选工具。但随着Python生态系统的成熟&#xff0c;越来越多的团队开始转向使…...

SEO_SEO优化常见误区及正确操作指南

SEO优化常见误区 在互联网时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已成为网站运营中不可或缺的一部分。很多人在实际操作中却常常犯下一些常见的SEO优化误区&#xff0c;这不仅影响了网站的流量&#xff0c;也可能导致搜索引擎的惩罚。下面我们将详细分析这些…...

Node.js后端服务开发:搭建调用Lingbot-Depth-Pretrain-ViTL-14的API接口

Node.js后端服务开发&#xff1a;搭建调用Lingbot-Depth-Pretrain-ViTL-14的API接口 你是不是遇到过这样的场景&#xff1a;手头有一个很厉害的AI模型&#xff0c;比如能估算图片深度的Lingbot-Depth-Pretrain-ViTL-14&#xff0c;但不知道怎么把它变成一个方便调用的服务&…...

FeignClient调用接口参数为null?可能是这个阿里规范在作怪

FeignClient参数丢失陷阱&#xff1a;从布尔类型序列化到企业级解决方案 微服务架构下&#xff0c;FeignClient作为声明式HTTP客户端&#xff0c;其简洁的API设计让远程调用如同本地方法般自然。但当你的DTO对象中那个精心设计的isActive字段在服务端始终显示为null时&#xff…...