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

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实现页面切换、顶部标签栏(可删、可切换,点击左侧超链接出现标签栏)

一、在一个页面&#xff08;不跨页面&#xff09; 效果&#xff1a; 代码 <!DOCTYPE html> <html><head><style>/* 设置标签页外层容器样式 */.tab-container {width: 100%;background-color: #f1f1f1;overflow: hidden;}/* 设置标签页选项卡的样式 …...

python print格式化输出

在 Python 中&#xff0c;以 f 或 F 前缀开始的字符串表示格式化字符串字面量&#xff0c;通常称为 “f-string”。从 Python 3.6 开始引入&#xff0c;它们是一种在字符串中嵌入表达式的新方法。这些表达式在运行时会被评估&#xff0c;然后使用 {} 将它们插入到字符串中。 这…...

钢筋水泥中的信仰--爱摸鱼的美工(16)

好久没有更新了&#xff0c;爱摸鱼的美工摸鱼太久可&#xff0c;终于出了一起钢筋水泥中的信仰&#xff0c;希望人们更加坚定个人的信仰。...

ViT论文Pytorch代码解读

ViT论文代码实现 论文地址&#xff1a;https://arxiv.org/abs/2010.11929 Pytorch代码地址&#xff1a;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服务器&#xff0c;Boa只能依次完成用户的请求&#xff0c;而不会fork出新的进程来处理并发连接请求。Boa支持CGI。Boa的设计目标是速度和安全&#xff0c;这很符合嵌入式的需要&#xff0c;他的特点就是可靠性和可移植性。 Boa的作用&#xff1a; 负责h…...

入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2)

入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目&#xff08;vue2&#xff09; 1. 安装npm2. 安装 Vue CLI3. 创建 vue_demo1 项目&#xff08;官网&#xff09;3.1 创建 vue_demo1 项目3.1.1 创建项目3.1.2 解决 sudo 问题 3.2 查看创建的 vue_demo1 项目3…...

oracle中的(+)

一、()为何意&#xff1f; oracle中的&#xff08;&#xff09;是一种特殊的用法&#xff0c;&#xff08;&#xff09;表示外连接&#xff0c;并且总是放在非主表的一方。 二、举例 左外连接&#xff1a; select A.a,B.a from A LEFT JOIN B ON A.bB.b; 等价于 select A.a,B.…...

五种永久免费 内网穿透傻瓜式使用

方法一(使用qydev) 官网&#xff1a;点击访问 1、官网 页面&#xff1a;找到客户端下载 2、找到自己电脑或者运行平台对应的版本(我的是windows 64位) 3、下载完成后解压到 自己熟悉的文件内保存&#xff0c;解压后&#xff0c;暂时不管她&#xff0c;继续第4步 4、登录官网…...

【Java基础增强】Stream流

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得…...

reduxreact-redux

redux redux组成部分&#xff1a;state,action,reducer,store store主要职责&#xff1a; 维持应用的state 提供getState()方法获取state 提供dispatch()方法发送action 通过subscribe()来注册监听 通过subscribe()返回值来注销监听 用法&#xff1a; action:必须要有return返…...

go中的并发

goruntine(协程) 每一个并发的执行单元叫做一个goruntine&#xff0c;要编写一个并发任务&#xff0c;可以在函数名前加go关键字&#xff0c;就能使这个函数以协程的方式运行&#xff0c; 如&#xff1a;go 函数名&#xff08;函数参数&#xff09;、 如果函数有返回值&…...

开启EMQX的SSL模式及SSL证书生成流程

生成证书 首先&#xff1a;需要安装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开发&#xff0c;99%都是Linux版的运用和安装&#xff0c;几乎不会涉及到Windows版&#xff0c;上一步的讲解只是为了知识的完整性&#xff0c;Windows版不作为重点&#xff0c;同学可以下去自己玩&#xff0c;企业实战就认一个版…...

Nginx vs Tomcat:一个高性能Web服务器和Java应用服务器的对决

Nginx vs Tomcat&#xff1a;一个高性能Web服务器和Java应用服务器的对决 Nginx和Tomcat都是常见的Web服务器解决方案&#xff0c;但它们在设计、适用场景以及性能方面存在一些显著差异。本文将比较这两个解决方案&#xff0c;并探讨它们各自的优势。 1. 设计理念 Nginx&…...

终端登录github两种方式

第一种方式 添加token&#xff0c;Setting->Developer Setting 第二种方式SSH 用下面命令查看远程仓库格式 git remote -v 用下面命令更改远程仓库格式 git remote set-url origin gitgithub.com:用户名/仓库名.git 然后用下面命令生成新的SSH秘钥 ssh-keygen -t ed2…...

【防火墙】防火墙NAT Server的配置

Web举例&#xff1a;公网用户通过NAT Server访问内部服务器 介绍公网用户通过NAT Server访问内部服务器的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网Web服务器和FTP服务器能够对外提供服务&#xff0c;需要在FW上配置NAT Server功能。除了公网…...

如何修复损坏的QR码?QRazyBox完整使用指南

如何修复损坏的QR码&#xff1f;QRazyBox完整使用指南 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经遇到过这样的困境&#xff1a;一张重要的QR码因为打印模糊、污渍或人为损坏而…...

如何在10分钟内搭建个人游戏串流服务器:Sunshine跨平台游戏流媒体完全指南

如何在10分钟内搭建个人游戏串流服务器&#xff1a;Sunshine跨平台游戏流媒体完全指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否梦想过在任何设备上畅玩PC游戏&#x…...

用知识图谱重构搜索引擎

一、传统搜索&#xff1a;关键词的“机械匹配”时代你输入词&#xff0c;它找文档我们熟悉的搜索引擎&#xff0c;无论是早期的Google还是百度的首页&#xff0c;核心逻辑都是关键词匹配。你输入“苹果热量”&#xff0c;它就把互联网里包含“苹果”和“热量”两个词的网页抓出…...

RISC-V架构革命:从服务器到汽车电子的开放生态与定制化实践

1. 项目概述&#xff1a;一场架构革命的序章 最近几年&#xff0c;如果你关注处理器和芯片设计&#xff0c;有一个词的出现频率会越来越高&#xff1a;RISC-V。它不再仅仅是学术论文里的概念&#xff0c;也不再是极客圈子里的玩具。从云端的数据中心服务器&#xff0c;到我们每…...

别再手动调图了!用LaTeX的subcaption包搞定论文子图排版(附完整代码)

LaTeX子图排版终极指南&#xff1a;告别手动调整的5个高效技巧 写论文时最让人抓狂的莫过于图片排版——尤其是当需要排列多个子图时。每次编译后总有几个图片位置不对齐&#xff0c;标题错位&#xff0c;或者直接跑到了下一页。这种反复调试的过程不仅浪费时间&#xff0c;还…...

ToolsFx密码学工具箱:一站式解决你的数据安全与编码转换需求

ToolsFx密码学工具箱&#xff1a;一站式解决你的数据安全与编码转换需求 【免费下载链接】ToolsFx 跨平台密码学工具箱。包含编解码&#xff0c;编码转换&#xff0c;加解密&#xff0c; 哈希&#xff0c;MAC&#xff0c;签名&#xff0c;大数运算&#xff0c;压缩&#xff0c;…...

拒绝复杂配置!OpenClaw Win11 版,双击安装,AI 自动干活

OpenClaw 一键安装包&#xff5c;全程图文教程 open claw一键部署包点击下载https://xiake.yun/api/download/package/16?promoCodeIVD643FDE29A 适配系统&#xff1a;Windows 10 64位&#xff08;新手专享版&#xff09; 产品亮点&#xff1a; 零门槛安装&#xff1a;无需…...

原神帧率解锁终极指南:简单三步突破60FPS限制

原神帧率解锁终极指南&#xff1a;简单三步突破60FPS限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神帧率解锁工具是一款专门为《原神》PC玩家设计的开源工具&#xff0c;能够安…...

STM32 SysTick中断:嵌入式系统时间管理的核心原理与实战应用

1. 项目概述&#xff1a;为什么SysTick中断是STM32开发的基石在STM32的嵌入式开发世界里&#xff0c;无论你是刚入门的新手&#xff0c;还是已经做过几个项目的熟手&#xff0c;有一个功能你几乎无法绕开&#xff0c;那就是SysTick——系统滴答定时器。你可能在HAL库的初始化代…...

1分钟带你认识分辨率 帧率, 码率 HDR 的作用

日常刷视频&#xff0c;刷到关于剪辑的只是&#xff0c;就会老是听到一些分辨率&#xff0c;帧率 码率 HDR 这个名字&#xff0c;那你一定很好奇&#xff0c;这些是什么&#xff0c;有什么作用&#xff0c;今天小编就用最简单直白的话&#xff0c;一分钟带你搞懂四大核心参数的…...