Vue/React 项目部署到服务器后,刷新页面出现404报错
问题描述:在本地启动项目一切正常,部署到服务器上线后出现BUG,项目刷新页面出现404。
起初以为是自己路由守卫或是token丢失问题,找了一圈终于解决了

产生原因:我们打开vue/react打包后生成的dist文件夹,可以看到只有一个 index.html 文件及一些静态资源,这个是因为vue/react是单页应用(SPA),只有一个index.html作为入口文件,其它的路由都是通过JS来进行跳转的。
而网页上显示的是静态资源的绝对路径,虽然浏览器上的url变化了,但实际上服务器的静态资源是没有更改路径的,始终只有index.html这一个入口,所以刷新就会导致url上的路径和服务器上的资源不匹配,无法找到静态资源,从而报错404。(多页应用因为有多个入口文件,所以不会有这样的问题)
解决方案一:vue router 的 mode 改成hash
export default new Router({
2 // mode: 'history',
3 mode: 'hash',
4 routes
5 })
解决方案二:配置nginx,将任意页面都重定向到 index.html
在服务器的nginx配置文件里,添加如下代码,再重启nginx,刷新网页即可
location / {try_files $uri $uri/ @rewrites;index index.html;
}location @rewrites {rewrite ^.*$ /index.html last;
}
扩展1: 为什么hash模式下没有刷新页面404 问题
hash路由的原理是onhashchange事件,hash模式下仅 hash符号之前的内容会被包含在http请求中,如www.xxx.com/#/login,hash的值为 #/login,hash值#/login虽然出现在 url中,但不会被包括在http请求中,其只会请求www.xxx.com,对服务端完全没有影响,因此改变hash不会重新加载页面,即使服务器nginx没有配置location,也不会返回404错误。
它的特点在于:hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对服务端完全没有影响,因此改变 hash 不会重新加载页面
而history模式:原理是利用了h5的Interface 中的pushState()方法和replaceState()方法,它们提供了对浏览器历史记录进行修改的功能,但当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向服务器发送请求,因此history模式正常页面操作跳转路由,是不会再次发送http资源请求的。但是当刷新的时候,由于url已经改变,如www.xxx.com/login会完整地向服务器请求相关资源,所以就会造成对应路径的资源找不到,从而返回404。
但是使用hash路由,url上会携带#号标志,且history模式的同步更新浏览器历史记录功能就没有了。
扩展2:vue路由的两种模式 hash和history的区别
1. 直观区别:
hash模式url带 # 号,history模式不带 # 号。
2. 深层区别:
- hash模式url里面永远带着#号,我们在开发当中默认使用这个模式。
- 如果用户考虑url的规范那么就需要使用history模式,因为history模式没有#号,是个正常的url适合推广宣传。功能也有区别,比如我们在开发app的时候有分享页面,那么这个分享出去的页面就是用vue或是react做的,再把这个页面分享到第三方的app里,有的app里面url是不允许带有#号的,所以要将#号去除那么就要使用history模式
- 但是使用history模式还有一个问题就是,在访问二级页面的时候,做刷新操作会出现404错误,那么就需要使用上述的方法或者和后端配合让他配置一下apache或是nginx的url重定向,重定向到你的首页路由上就ok啦。
相关文章:
Vue/React 项目部署到服务器后,刷新页面出现404报错
问题描述:在本地启动项目一切正常,部署到服务器上线后出现BUG,项目刷新页面出现404。 起初以为是自己路由守卫或是token丢失问题,找了一圈终于解决了 产生原因:我们打开vue/react打包后生成的dist文件夹,可…...
通信笔记:RSRP、RSRQ、RSNNR
0 基础概念:RE、RS和RB RE (Resource Element):资源元素是 LTE 和 5G 网络中的最小物理资源单位。一个资源元素对应于一个子载波的一个符号周期。 RS (Reference Signal):参考信号是在 LTE 和 5G 网络中用于多种目的的特定类型的信号。它们可…...
前端:html实现页面切换、顶部标签栏(可删、可切换,点击左侧超链接出现标签栏)
一、在一个页面(不跨页面) 效果: 代码 <!DOCTYPE html> <html><head><style>/* 设置标签页外层容器样式 */.tab-container {width: 100%;background-color: #f1f1f1;overflow: hidden;}/* 设置标签页选项卡的样式 …...
python print格式化输出
在 Python 中,以 f 或 F 前缀开始的字符串表示格式化字符串字面量,通常称为 “f-string”。从 Python 3.6 开始引入,它们是一种在字符串中嵌入表达式的新方法。这些表达式在运行时会被评估,然后使用 {} 将它们插入到字符串中。 这…...
钢筋水泥中的信仰--爱摸鱼的美工(16)
好久没有更新了,爱摸鱼的美工摸鱼太久可,终于出了一起钢筋水泥中的信仰,希望人们更加坚定个人的信仰。...
ViT论文Pytorch代码解读
ViT论文代码实现 论文地址:https://arxiv.org/abs/2010.11929 Pytorch代码地址:https://github.com/lucidrains/vit-pytorch ViT结构图 调用代码 import torch from vit_pytorch import ViTdef test():v ViT(image_size 256, patch_size 32, num_cl…...
Harbor查看密码
已经登录过的harbor 查看密码 cat /root/.docker/config.json {"auths": {"172.28.120.140": {"auth": "YWRtaW43QDIwMTg"}}使用base64解码...
Boa服务器与Cgi简介
Boa是一个单任务的HTTP服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。Boa支持CGI。Boa的设计目标是速度和安全,这很符合嵌入式的需要,他的特点就是可靠性和可移植性。 Boa的作用: 负责h…...
入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2)
入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2) 1. 安装npm2. 安装 Vue CLI3. 创建 vue_demo1 项目(官网)3.1 创建 vue_demo1 项目3.1.1 创建项目3.1.2 解决 sudo 问题 3.2 查看创建的 vue_demo1 项目3…...
oracle中的(+)
一、()为何意? oracle中的()是一种特殊的用法,()表示外连接,并且总是放在非主表的一方。 二、举例 左外连接: select A.a,B.a from A LEFT JOIN B ON A.bB.b; 等价于 select A.a,B.…...
五种永久免费 内网穿透傻瓜式使用
方法一(使用qydev) 官网:点击访问 1、官网 页面:找到客户端下载 2、找到自己电脑或者运行平台对应的版本(我的是windows 64位) 3、下载完成后解压到 自己熟悉的文件内保存,解压后,暂时不管她,继续第4步 4、登录官网…...
【Java基础增强】Stream流
1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得…...
reduxreact-redux
redux redux组成部分:state,action,reducer,store store主要职责: 维持应用的state 提供getState()方法获取state 提供dispatch()方法发送action 通过subscribe()来注册监听 通过subscribe()返回值来注销监听 用法: action:必须要有return返…...
go中的并发
goruntine(协程) 每一个并发的执行单元叫做一个goruntine,要编写一个并发任务,可以在函数名前加go关键字,就能使这个函数以协程的方式运行, 如:go 函数名(函数参数)、 如果函数有返回值&…...
开启EMQX的SSL模式及SSL证书生成流程
生成证书 首先:需要安装Openssl 以下是openssl命令 生成CA证书 1.openssl genrsa -out rootCA.key 2048 2.openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -subj "/CCN/STShandong/Ljinan/Oyunding/OUplatform/CNrootCA" -out ro…...
4 | Java Spark实现 WordCount
简单的 Java Spark 实现 WordCount 的教程,它将教您如何使用 Apache Spark 来统计文本文件中每个单词的出现次数。 首先,确保您已经安装了 Apache Spark 并设置了运行环境。您需要准备一个包含文本内容的文本文件,以便对其进行 WordCount 分析。 代码 package com.bigdat…...
Redis7安装
1. 使用什么系统安装redis 由于企业里面做Redis开发,99%都是Linux版的运用和安装,几乎不会涉及到Windows版,上一步的讲解只是为了知识的完整性,Windows版不作为重点,同学可以下去自己玩,企业实战就认一个版…...
Nginx vs Tomcat:一个高性能Web服务器和Java应用服务器的对决
Nginx vs Tomcat:一个高性能Web服务器和Java应用服务器的对决 Nginx和Tomcat都是常见的Web服务器解决方案,但它们在设计、适用场景以及性能方面存在一些显著差异。本文将比较这两个解决方案,并探讨它们各自的优势。 1. 设计理念 Nginx&…...
终端登录github两种方式
第一种方式 添加token,Setting->Developer Setting 第二种方式SSH 用下面命令查看远程仓库格式 git remote -v 用下面命令更改远程仓库格式 git remote set-url origin gitgithub.com:用户名/仓库名.git 然后用下面命令生成新的SSH秘钥 ssh-keygen -t ed2…...
【防火墙】防火墙NAT Server的配置
Web举例:公网用户通过NAT Server访问内部服务器 介绍公网用户通过NAT Server访问内部服务器的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网Web服务器和FTP服务器能够对外提供服务,需要在FW上配置NAT Server功能。除了公网…...
如何修复损坏的QR码?QRazyBox完整使用指南
如何修复损坏的QR码?QRazyBox完整使用指南 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经遇到过这样的困境:一张重要的QR码因为打印模糊、污渍或人为损坏而…...
如何在10分钟内搭建个人游戏串流服务器:Sunshine跨平台游戏流媒体完全指南
如何在10分钟内搭建个人游戏串流服务器:Sunshine跨平台游戏流媒体完全指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否梦想过在任何设备上畅玩PC游戏&#x…...
用知识图谱重构搜索引擎
一、传统搜索:关键词的“机械匹配”时代你输入词,它找文档我们熟悉的搜索引擎,无论是早期的Google还是百度的首页,核心逻辑都是关键词匹配。你输入“苹果热量”,它就把互联网里包含“苹果”和“热量”两个词的网页抓出…...
RISC-V架构革命:从服务器到汽车电子的开放生态与定制化实践
1. 项目概述:一场架构革命的序章 最近几年,如果你关注处理器和芯片设计,有一个词的出现频率会越来越高:RISC-V。它不再仅仅是学术论文里的概念,也不再是极客圈子里的玩具。从云端的数据中心服务器,到我们每…...
别再手动调图了!用LaTeX的subcaption包搞定论文子图排版(附完整代码)
LaTeX子图排版终极指南:告别手动调整的5个高效技巧 写论文时最让人抓狂的莫过于图片排版——尤其是当需要排列多个子图时。每次编译后总有几个图片位置不对齐,标题错位,或者直接跑到了下一页。这种反复调试的过程不仅浪费时间,还…...
ToolsFx密码学工具箱:一站式解决你的数据安全与编码转换需求
ToolsFx密码学工具箱:一站式解决你的数据安全与编码转换需求 【免费下载链接】ToolsFx 跨平台密码学工具箱。包含编解码,编码转换,加解密, 哈希,MAC,签名,大数运算,压缩,…...
拒绝复杂配置!OpenClaw Win11 版,双击安装,AI 自动干活
OpenClaw 一键安装包|全程图文教程 open claw一键部署包点击下载https://xiake.yun/api/download/package/16?promoCodeIVD643FDE29A 适配系统:Windows 10 64位(新手专享版) 产品亮点: 零门槛安装:无需…...
原神帧率解锁终极指南:简单三步突破60FPS限制
原神帧率解锁终极指南:简单三步突破60FPS限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神帧率解锁工具是一款专门为《原神》PC玩家设计的开源工具,能够安…...
STM32 SysTick中断:嵌入式系统时间管理的核心原理与实战应用
1. 项目概述:为什么SysTick中断是STM32开发的基石在STM32的嵌入式开发世界里,无论你是刚入门的新手,还是已经做过几个项目的熟手,有一个功能你几乎无法绕开,那就是SysTick——系统滴答定时器。你可能在HAL库的初始化代…...
1分钟带你认识分辨率 帧率, 码率 HDR 的作用
日常刷视频,刷到关于剪辑的只是,就会老是听到一些分辨率,帧率 码率 HDR 这个名字,那你一定很好奇,这些是什么,有什么作用,今天小编就用最简单直白的话,一分钟带你搞懂四大核心参数的…...
