Umi - 刷新后页面报404

Umi 项目本地运行刷新没问题,但是部署之后刷新页面报404。因为Umi 默认是用 browser 模式,需要做一下处理。
以下是官方给出解决方案。
在这里插入图片描述

一、解决方案

1. 方案一:改用hashHistory

.umirc.js

{history: { type: 'hash' },
}

这个方案项目打包只生成一个 index.html 文件
项目路由会带#

2. 方案二:静态化

.umirc.js

{exportStatic: {},
}

项目打包除了生成主 index.html 文件,每个路由都会对应一个 index.html 文件
项目路由不会带#

3. 方案三:服务端配置

修改服务器的配置,以 Nginx 为例:(Nginx配置文件位置为/etc/nginx/nginx.conf)

server {...location /{...try_files $uri $uri/ /index.html; //解决刷新页面变成404问题的代码}   
}

或者

server {...location /{...if (!-f $request_filename) {rewrite ^.*$ /index.html break;}}   
}

这个方案项目打包只生成一个 index.html 文件
项目路由不会带#

另外:
uri 代表请求的文件及其路径,uri/ 表示对应路径的目录。
例如请求 http://example.com/page 时,uri 表示资源目录下是否存在名为page的文件, uri/ 表示名为 page 的目录,这两个参数表示接收到请求时先寻找 uri 对应的文件或目录。
所以,新增的这个配置是为了让浏览器访问不存在的页面时,都给索引到 index.html 。

总结

以上三个方案都可以解决页面刷新404的问题,但是方案一不需要服务端支持,而且处理动态路由比较丝滑,所以如果只是静态页面,推荐用方案一。

二、原理

通常路由分为 hash 路由 和 history 路由。两者具体的实现原理可以看这篇文章。

1. 单页应用

只在第一次加载页面时,返回唯一的html页面和它的公共静态资源,后续的页面跳转都不会从服务端拿html文件。(hash路由和history路由实现浏览器url变化而不刷新页面)

2. hash路由

监听 url 中 hash 的变化, 不需要服务端的支持;

通过hash来实现页面视图的控制,当 # 后面的路径发生变化时,调用 window 的 onhashchange 方法,实现页面刷新浏览器不重新发请求。

3. history路由

监听 url 中 路径的变化,需要客户端服务端共同的支持;

路由中没有#,当 url 改变时,通过 window.history 中的 pushState() 和 replaceState() 方法,实现更新浏览器 URL 地址而不重新发起请求。

3. 为什么页面刷新会出现404

当刷新浏览器时,浏览器认为是请求一个新的页面,于是真实地向服务器发送了一个 http 的网页请求,而新的页面如果不存在,就会导致404。

如果是页面切换,是不会刷新页面的。比如,当访问 http://example.com/home,会渲染出 Home 组件,点击链接切换到 http://example.com/about,会渲染出 About 组件,同样不会刷新整个页面。

如果是hash模式,当访问 http://example.com/#/home时刷新页面,hash 的值为#/home,仅 hash 符号之前的内容会被包含在请求中,所以发起 http://example.com/的请求,服务器返回 index.html 文件,可以正常显示页面。对服务端来说,即使没有配置location,也不会返回404错误

如果是history模式,当访问 http://example.com/home时刷新页面,会发起 http://example.com/home/的请求,服务器没有这个文件,所以会报404的错误。因此若要使用 history 路由,需要服务端的支持。

另外,为了避免真的出现404页面,前端应该准备一个 404 错误页面。


routes: [{ path: '*', component: NotFoundComponent }]

参考链接
Umi FAQ
深入理解前端中的 hash 和 history 路由

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538342.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何从任何文档生成指令数据集以进行LLM微调

使用轻量级库经济地生成高质量的合成数据集 大型语言模型 (LLMs) 是功能强大的通用工具,但它们通常缺乏特定于领域的知识,这些知识通常存储在企业存储库中。 使用您自己的数据微调自定义LLM可以弥合这一差距,而数据准…

如何在Linux部署Docker Registry本地镜像仓库并实现无公网IP远程连接

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

子查询 封装属性创建Connection连接类 数据库连接池

子查询 在select语句中包含另一个select 语句 -->子查询 子查询的分类 单行单列子查询 在where子句中使用 运算符 ! > < -- 查询工资比公司平均工资高的员工信息 -- 查询与员工’smith‘同职位的员工信息 -- 查询比员工joins入职…

八数码(C++)

原题在这里P1379 八数码难题 思路&#xff1a; 本题的思路很有意思&#xff0c;首先我们知道0是可以和上下左右交换位置的&#xff08;前提是不出边界&#xff09; 不难看出我们可以把这个二维数组给转化为一个相对应的字符串来表示当前的状态&#xff0c;每进行一次&#xff…

wxss和css的区别

目录 1. 语法差异 2. 尺寸单位 3. 样式导入 WXSS 示例代码&#xff1a; CSS 示例代码&#xff1a; 4. 组件和属性的支持 总结 WXSS (WeiXin Style Sheets) 和 CSS (Cascading Style Sheets) 都是用于描述文档样式的语言&#xff0c;但它们在微信小程序和网页开发中有一些…

英飞凌电源管理PMIC的安全应用

摘要 本篇文档主要用来介绍英飞凌电源管理芯片TLF35584的使用&#xff0c;基于电动助力转向应用来介绍。包含一些安全机制的执行。 TLF35584介绍 TLF35584是英飞凌推出的针对车辆安全应用的电源管理芯片&#xff0c;符合ASIL D安全等级要求&#xff0c;具有高效多电源输出通道&…

413 Request Entity Too Large 问题如何解决

遇到“413 Request Entity Too Large”错误通常意味着你尝试上传或提交到服务器的数据量超过了服务器能够处理的限制。这个问题通常与Web服务器的配置相关&#xff0c;比如Nginx或Apache。这个问题出现在使用Nginx作为Web服务器的环境中。这里有几种解决方法&#xff1a; 1. 调…

【UE5】非持枪趴姿移动混合空间

项目资源文末百度网盘自取 创建角色在非持枪状态趴姿移动的动画混合空间 在BlendSpace文件夹中单击右键选择 动画(Animation) 中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_NormaProne 打开BS_NormaProne 水平轴表示角色的方向&#xff0c;命名为Directi…

【刷题训练】反转字符串i 和 ii(区间部分翻转)

344.反转字符串 题目要求 示例 1&#xff1a; 输入&#xff1a;s [“h”,“e”,“l”,“l”,“o”] 输出&#xff1a;[“o”,“l”,“l”,“e”,“h”] 示例 2&#xff1a; 输入&#xff1a;s [“H”,“a”,“n”,“n”,“a”,“h”] 输出&#xff1a;[“h”,“a”,“n”,…

paraview处理openfoam对称模型

paraview处理openfoam对称模型 步骤如下: 导入对称模型,以openfoam中xx\tutorials\incompressible\SRFSimpleFoam\mixer中的搅拌器为例;使用ctrl+space,查找transform,在Filters中也能找到;经过三次transform,可以移动旋转出对称的其他3部分;经过此三次移动旋转,并不能…

C#文件交互

C#是一种流行的编程语言&#xff0c;广泛应用于开发各种类型的应用程序&#xff0c;包括需要进行文件交互的应用程序。文件交互是指应用程序与计算机文件系统进行交互&#xff0c;包括读取、写入、创建、删除和修改文件等操作。在C#中&#xff0c;文件交互通常通过.NET框架提供…

工业界真实的推荐系统(小红书)-召回-改进双塔模型-自监督学习

课程特点&#xff1a;系统、清晰、实用&#xff0c;原理和落地经验兼具 b站&#xff1a;https://www.bilibili.com/video/BV1HZ421U77y/?spm_id_from333.337.search-card.all.click&vd_sourceb60d8ab7e659b10ea6ea743ede0c5b48 讲义&#xff1a;https://github.com/wangsh…