Vue/React 项目部署到服务器后,刷新页面出现404报错

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

问题描述:在本地启动项目一切正常,部署到服务器上线后出现BUG,项目刷新页面出现404。

起初以为是自己路由守卫或是token丢失问题,找了一圈终于解决了

vue部署 刷新404,vue.js,前端,javascript

产生原因:我们打开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. 深层区别: 文章来源地址https://www.toymoban.com/news/detail-729350.html

  • hash模式url里面永远带着#号,我们在开发当中默认使用这个模式。
  • 如果用户考虑url的规范那么就需要使用history模式,因为history模式没有#号,是个正常的url适合推广宣传。功能也有区别,比如我们在开发app的时候有分享页面,那么这个分享出去的页面就是用vue或是react做的,再把这个页面分享到第三方的app里,有的app里面url是不允许带有#号的,所以要将#号去除那么就要使用history模式
  • 但是使用history模式还有一个问题就是,在访问二级页面的时候,做刷新操作会出现404错误,那么就需要使用上述的方法或者和后端配合让他配置一下apache或是nginx的url重定向,重定向到你的首页路由上就ok啦。

到了这里,关于Vue/React 项目部署到服务器后,刷新页面出现404报错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • ruoyi vue部署服务器,点击刷新、登录主页、退出报404和nginx问题解决

    官网文档:前端手册 | RuoYi 步骤如下:有些特殊情况需要部署到子路径下,例如: https://www.ruoyi.vip/admin ,可以按照下面流程修改。 修改 layout/components/Navbar.vue 中的 location.href 修改 utils/request.js 中的 location.href 打开浏览器,输入: https://www.ruoyi.vip/admin  能正常访问和刷新表示

    2024年02月04日
    浏览(61)
  • vue/react项目刷新页面出现404的原因以及解决办法

    问题描述:vue/react项目,正常的页面操作跳转,不会出现404的问题,但是一旦刷新,就会出现404报错。 产生原因:我们打开vue/react打包后生成的dist文件夹,可以看到只有一个 index.html 文件及一些静态资源,这个是因为vue/react是单页应用(SPA),只有一个index.html作为入口文件,

    2024年02月06日
    浏览(50)
  • 使用Nginx反向代理,将React项目打包后部署到服务器的二级子目录

    我们上线一个项目的时候如果服务器上只有这一个项目的话可以直接将打包后的代码部署到服务器指定的根目录,然后直接上线看就可以看到,不用配置其他项。 但是,如果服务器有多个项目的话,我们就需要将代码部署到服务器根目录里边的子目录了,而放到子目录的话,

    2024年03月26日
    浏览(55)
  • vue项目打包部署到服务器

    目录 一、打包项目  二、修改Nginx的配置 三、部署 四、开放端口号 1. 在 vue.config.js 文件中找到并修改,主要是publicPath 与outputDir 两项配置,若项目中有baseUrl,替换为publicPath (baseUrl, vue cli 3.3 已弃用) 2. 修改完成之后就可以进行打包了,在package.json文件找到下图中的打包命

    2024年02月05日
    浏览(69)
  • 部署vue项目到阿里云服务器

    一般前端工程师只会使用npm run serve 在开发环境下验证,那么如何把npm run build 打出的包部署到服务器上进行上线呢?这篇文章就详细阐述这一流程。 1. 购买或试用阿里云服务器     作为新用户可以试用一个月阿里云服务器,阿里云官方网址如下:https://www.aliyun.com/?utm_conte

    2024年02月05日
    浏览(43)
  • 云服务器部署vue/node项目

    此处以阿里云服务器为例,配置的是LNMP环境 以阿里云服务为例,端口自定义99 1、在 /usr/share/nginx/html/ 该目录下新建文件夹,该文件夹是部署的打好包的前端项目 例: 2、进入nginx目录配置相关配置文件:/etc/nginx/conf.d/,在新建lemons.conf文件 touch /etc/nginx/conf.d/lemons.conf  //快速

    2024年02月04日
    浏览(50)
  • vue项目通过nginx部署到服务器

    部署的服务器是阿里云买的,使用finalShell根据账号秘密链接服务器即可 找到/user/local/nginx/conf/下面的nginx.conf文件进行配置,这里单独新建一个finace.conf文件,配置后再导入到nginx.conf文件,便于管理 这个Nginx服务器配置设置了一个监听端口为8081的服务器,服务器名称设置为127.0.0.

    2024年03月11日
    浏览(51)
  • 【前端部署】vue项目打包并部署到Linux服务器

    在vs code中打开vue前端项目文件夹,在终端中输入 npm run build ,打包完成后,在前端项目文件夹中会生成一个名为 dist 的文件夹,如下图所示: dist文件夹打开如下所示: 打开服务器终端,在终端中输入以下命令,下载nginx安装包。 其中nginx版本可以自己选择,具体版本可查看

    2024年02月06日
    浏览(68)
  • [C++项目] Boost文档 站内搜索引擎(5): cpphttplib实现网络服务、html页面实现、服务器部署...

    在前四篇文章中, 我们实现了从文档文件的清理 到 搜索的所有内容: 项目背景: 🫦[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍… 文档解析、处理模块 parser 的实现: 🫦[C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对

    2024年02月13日
    浏览(47)
  • java+vue 前后端项目部署 服务器部署流程 包括nginx软件安装,服务器选择,域名配置

    现在的web端项目大多数都是java+vue前后端分离的项目,都需要分开来部署,基本上都是部署在云服务器上的,这就涉及到选择和购买服务器,以及安装环境,本文记录的是在机器上安装软件,不在docker和宝塔上安装。下面请看详细的步骤吧,都是自己在工作中使用过的,本人

    2024年02月13日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包