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

这篇具有很好参考价值的文章主要介绍了vue/react项目刷新页面出现404的原因以及解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

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

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

  3. 接下来我们看看服务器上的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;
      }
    }
    

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

解决办法

  1. 法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. 法2:配置nginx,将任意页面都重定向到 index.html,把路由交给前端代码去处理

    产生问题的本质是因为我们的路由是通过JS来执行视图切换的,当我们进入到子路由时刷新页面,web容器没有相对应的页面此时会出现404,所以我们只需要配置nginx,将任意页面都重定向到 index.html,把路由交给前端代码去处理(即先进入到index.html,再通过js对url进行路由分发和页面渲染)
    在服务器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.toymoban.com/news/detail-461464.html

到了这里,关于vue/react项目刷新页面出现404的原因以及解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3中使用History模式引发刷新页面出现404的问题

    在vue3中的路由中,路由间的跳转是不刷新浏览器的,也就是用ajax来请求后端接口对组件进行增量更新,hash模式中#后面的路径都不会直接发送给后端,都是前端自己在玩,但是路径中有\\\'#\\\'不利于seo优化而且也不美观,一旦在history模式下刷新浏览器,就会相当于直接请求后端中对应uri的

    2024年02月17日
    浏览(30)
  • Vue项目nginx服务器部署刷新页面404错误

    最近想自己做点小项目练手,前端用的是vue框架,用nginx当做服务器来部署。但是当部署完成后,遇到了刷新页面和打开新页面报404错误的问题 问题就像上面描述的一样,刷新页面和打开新页面都是报404错误。 先说最终解决办法,在nginx的配置文件的location中改一下设置方式

    2024年02月17日
    浏览(39)
  • 安装Windows版nginx以及部署前端代码并就解决刷新出现404

    (1)下载地址:https://nginx.org/en/download.html (2)建议选稳定版下载 (3)下载好后,直接解压即可 (1)启动nginx时,使用命令进行操作;不要直接双击nginx.exe,在nginx根目录下直接输:cmd。 启动时会一闪而过是正常的 (1)启动nginx:start nginx ①启动后查看任务进程是否存在

    2024年02月04日
    浏览(30)
  • nginx 部署vue项目,路由模式为history时,页面刷新404问题

    nginx部署vue项目,文件放在html下的dist文件夹中 nginx.conf 文件中,server 里配置文件的位置、请求跨域等信息 在启动项目后因为配置的是root,首先是找不到html下面的sys-test文件夹,再经过配置修改为alias配置后,刷新又会报404错误,最终配置为如下,成功解决 因为打包部署后,

    2023年04月08日
    浏览(37)
  • vue3.2项目中使用history路由模式刷新后页面404

    开发过程中,路由可以正常访问,打包后也可以正常访问,但是一刷新页面就会出现404错误 方法一:修改为Hash路由模式 在router/index.ts文件中,将history路由模式修改为hash路由模式即可。 history路由模式: hash路由模式: 方法二、修改后台伪静态 Nginx: Apache: 可以参考下这篇文

    2024年02月11日
    浏览(38)
  • Nginx笔记-vue项目刷新出现404(try_files和index)

    目前的nginx.conf配置: 部署是成功了,但是有个问题,就是感觉整个前端不会找uri,按F5或者在浏览器输入url都会404,只从vue默认的地方进,才行。 解决方法: 原因: index index.htm index.html; index 就是根目录,也就是只识别“/”结尾的,输入不存在或者刷新页面的路径就直接报

    2024年02月09日
    浏览(27)
  • vue3项目部署到服务器,刚打开没事,一刷新页面就404

    vue3项目部署到服务器,刚打开没事,一刷新页面就404 不知道什么原因。百度了下才发现问题所在 问题所在: vue-router历史模式的问题: vue3中历史模式,默认改为了HTML5模式: createWebHistory() 解决办法: createWebHistory 换成 createWebHashHistory ,将历史模式,由当前的HTML5模式,改

    2024年01月18日
    浏览(37)
  • 服务器部署—若依【vue】如何部署到nginx里面?nginx刷新页面404怎么办?【完美解决建议收藏】

    服务器部署项目我们大家都会遇到,但是有些铁子会遇到很多的问题,比如前端部署nginx如何操作? 前端有单纯的静态页面、还有前后端分离的项目;这里博主直接分享最牛最到位的前后端分离项目的前端部署到nginx上面,以若依项目【springboot+vue】为例,实现将前端部署到

    2024年02月03日
    浏览(41)
  • Vue配合Nginx部署出现404、页面无法跳转、后端请求失败问题解决方案

    常见问题有: 1、部署后,打开地址可以看到,但是刷新后出现404。 2、Vue的路由资源并不一定是真实路径,导致页面无法跳转或其他资源加载问题。 3、请求后端接口地址失败。

    2024年02月13日
    浏览(23)
  • vue 动态路由刷新失效及404页面处理

    在开发后台管理项目,我们会使用vue动态路由做权限管理,但是使用vue动态路由时会遇到一些坑,这里总结一下,并提供解决思路 问题:刷新页面时会把addRouter添加的动态路由刷新掉,因此浏览器找不到之前添加的路由,便会进入白屏页面或者404页面 处理方式:判断是否刷

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包