位置: IT常识 - 正文

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

编辑:rootadmin
vue/react项目刷新页面出现404的原因以及解决办法 vue/react项目刷新页面出现404的原因以及解决办法背景解决办法文章参考背景

推荐整理分享vue/react项目刷新页面出现404的原因以及解决办法(react 刷新),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react如何刷新当前页面,react 刷新,react刷新组件不刷新页面,react 刷新页面,react 刷新,react 刷新,react 刷新,react 刷新页面,内容如对您有帮助,希望把文章链接给更多的朋友!

问题描述: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.htm index index.html index.htm; }}vue/react项目刷新页面出现404的原因以及解决办法(react 刷新)

根据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;}文章参考

https://www.cnblogs.com/echohye/p/16566706.html https://www.jb51.net/article/256217.htm https://www.cnblogs.com/ling-yu-amen/p/11533726.html

本文链接地址:https://www.jiuchutong.com/zhishi/290251.html 转载请保留说明!

上一篇:自己动手搭网站(六):javaweb搭建一个简单的个人博客系统(自己搭建网站怎么赚钱)

下一篇:el-table 列的动态显示与隐藏(element动态变化表格列)

  • 什么时候要计提坏账准备
  • 航天信息开票软件
  • 销售货物的运费计入成本吗
  • 什么是协税护税员
  • 存货核算的内容是什么
  • 一般纳税人变成小规模 在电子税务局哪里可以找到
  • 房地产公司资本公积
  • a3软件怎么反记账
  • 出纳人员应该怎么称呼
  • 增值税进项税转出所得税调整吗
  • 丢失发票已报税证明单取消
  • 企业所得税减半征收政策
  • 工企业用地土地使用税怎么征收?
  • 价内税和价外税区别
  • 高速公路通行费发票怎么开
  • 个体户可以申请公章吗
  • 广告公司收到专票怎么做成本
  • 个体户注销麻烦还是公司注销麻烦
  • 核销单取消后出口收汇流程
  • 小规模企业申报表填写
  • 按产品的品种型号规格规定的计划
  • 净资产是不是包含设备
  • win10怎么建立多个用户
  • 如何在excel中链接图片对方能显示
  • 磁盘碎片指的是磁盘因为长期使用
  • 公司财务账目不符怎么办
  • 代扣的工会会费和工会经费
  • win10右键失灵解决办法
  • 最高频率内存条是多少
  • PHP:pcntl_wait()的用法_PCNTL函数
  • 未按规定开具发票怎么处罚
  • php数组去重函数
  • php实现上传图片功能
  • php ob缓存
  • vue3.0安装
  • php7.3
  • 原始凭证必要时可以涂改
  • 房地产企业汇算清缴资料
  • 购买农产品取得增值税普通发票可以抵扣吗
  • python中列表的索引用法
  • okhttp3源码
  • 金融企业买入返还股票
  • 印花税怎么填申报表
  • 收据的种类有哪些
  • 固定资产投资额是指什么
  • 培训费 会议费
  • 税后工资怎么申报个税
  • 个人所得税如何计算
  • 被投资单位信息是什么
  • 金税盘的维护费怎么报税
  • 酒店没有营业执照开业犯法吗
  • 进项税可以跨年结转吗
  • 日用品办公用品的经营范围
  • 补开以前的发票可以抵企业所得税吗?
  • 这个营业外支出怎么算
  • 软件开发过程中,一个错误发现的越晚
  • 其他应收款科目核算哪些业务
  • 公司租用私人汽车怎么操作
  • 递延所得税资产和递延所得税负债
  • 收派服务费可以简易计税吗
  • 备查账包括哪些
  • sqlserver数据库建库建表
  • centos调出命令行
  • autorun.dll
  • mac电脑怎么打开
  • win1021年更新
  • linux里面vim
  • 用python加密
  • 批量数据验证
  • Node.js中的事件循环是什么意思
  • python用while循环求π的值
  • 全面详细的体检
  • UNITY gameobject代码中setacvtive(false)与面板中直接去掉勾 效果不一样
  • js如何获取当前页面的url
  • android studio 安装好后怎么在桌面找到
  • android studio的app
  • 蚌埠站到蚌埠南站多远
  • 哪些润滑油属于危险品类
  • 收到免税的苗木发票怎么做账
  • 哈尔滨银行网上银行怎么开通
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设