若依前端项目遇到布署服务器后刷新404问题解决方案

这是一个经典的问题,相信很多同学都有遇到过,那么你知道其真正的原因吗?

我们先还原一下场景:

vue项目在本地时运行正常,但部署到服务器中,刷新页面,出现了404错误
先定位一下,HTTP 404 错误意味着链接指向的资源不存在

问题在于为什么不存在?且为什么只有history模式下会出现这个问题?

为什么history模式下有问题

Vue是属于单页应用(single-page application)

而SPA是一种网络应用程序或网站的模型,所有用户交互是通过动态重写当前页面,前面我们也看到了,不管我们应用有多少页面,构建物都只会产出一个index.html

现在,我们回头来看一下我们的nginx配置

server {
  listen  80;
  server_name  www.xxx.com;
 
  location / {
    index  /data/dist/index.html;
  }
}

可以根据 nginx 配置得出,当我们在地址栏输入 www.xxx.com 时,这时会打开我们 dist 目录下的 index.html 文件,然后我们在跳转路由进入到 www.xxx.com/login

关键在这里,当我们在 website.com/login 页执行刷新操作,nginx location 是没有相关配置的,所以就会出现 404 的情况

为什么hash模式下没有问题
router hash 模式我们都知道是用符号#表示的,如 website.com/#/login, hash 的值为 #/login

它的特点在于:hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对服务端完全没有影响,因此改变 hash 不会重新加载页面

hash 模式下,仅 hash 符号之前的内容会被包含在请求中,如 website.com/#/login 只有 website.com 会被包含在请求中 ,因此对于服务端来说,即使没有配置location,也不会返回404错误

解决方案

看到这里我相信大部分同学都能想到怎么解决问题了,

产生问题的本质是因为我们的路由是通过JS来执行视图切换的,

当我们进入到子路由时刷新页面,web容器没有相对应的页面此时会出现404

所以我们只需要配置将任意页面都重定向到 index.html,把路由交由前端处理

对nginx配置文件.conf修改,添加try_files $uri $uri/ /index.html;

server {
  listen  80;
  server_name  www.xxx.com;
 
  location / {
    index  /data/dist/index.html;
    try_files $uri $uri/ /index.html;
  }
}

修改完配置文件后记得配置的更新

nginx -s reload

这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件

### 回答1: 常见的 404 错误原因有以下几种: 1. 网站域名输入错误: 输入的网站域名可能包含了拼写错误或者是多余的字符, 导致无法正确访问网站。 2. 网站移动或删除: 网站可能已经被移动到了新的域名或者被删除, 导致原来的域名无法正常访问。 3. 网络连接问题: 可能是由于网络连接不稳定或者是路由器出现故障, 导致无法正常访问网站。 4. 网站维护或升级: 网站可能正在进行维护或升级, 导致暂时无法访问。 5. 网站服务器问题: 可能是由于服务器出现故障或者是过载, 导致无法正常访问网站。 6. 网站链接错误: 网站内部的某些链接可能存在问题, 导致无法正常访问。 ### 回答2: 404错误是指在访问网页时,服务器无法找到请求的资源。常见的404错误的原因有以下几种: 1. 资源被移动或删除:当用户请求访问的网页或文件被管理员移动或删除时,服务器将返回404错误。这可能是因为网站进行了结构调整或文件被删除等原因。 2. URL输入错误:用户在浏览器中输入的URL可能存在拼写错误或输入错误,导致服务器无法找到请求的资源。在这种情况下,服务器会返回404错误,提示用户输入正确的URL。 3. 网络连接问题:有时候用户的网络连接存在问题,无法正常连接到服务器。这可能是由于网络故障、DNS解析错误或服务器故障等原因导致的。在这种情况下,服务器无法提供请求的资源,返回404错误。 4. 引用链接失效:如果用户访问的网页中包含了失效的引用链接,即被引用的资源不存在或被移动,服务器将返回404错误。这种情况通常是由于网页作者更新了页面链接,但未及时更新引用链接导致的。 总之,404错误是用户请求的资源在服务器上不存在或无法找到的情况下返回的错误信息。这可能是由于资源移动、URL输入错误、网络连接问题或引用链接失效等多种原因造成的。用户在遇到404错误时,可以尝试检查URL输入是否正确、检查网络连接是否正常,或联系网站管理员解决问题。 ### 回答3: 404错误是指在用户请求某个页面时,服务器无法找到该页面,常见的原因有以下几种: 1. 被请求的页面已被删除或重命名。这可能是因为网站进行了更新或者重新组织,导致原来的页面被移除或更改了名称。 2. 输入的URL有错误。当用户输入的URL拼写有误或者包含了无效的字符,服务器无法理解该请求,并返回404错误。 3. 路由配置错误。在网站开发过程中,如果没有正确配置路由表或者路由规则与请求的URL不匹配,服务器将无法找到对应的页面,从而返回404错误。 4. 链接过期或失效。当用户点击一个过期或失效的链接时,服务器将无法找到对应的页面,从而返回404错误。 5. 文件路径错误。如果请求的文件路径有误,或者文件被移动到了其他位置,服务器将无法找到文件并返回404错误。 6. 网络连接问题。有时候404错误是由网络连接问题引起的,例如服务器宕机、服务器过载等。 解决404错误的方法包括: 1. 检查URL是否正确,确保没有拼写错误或包含无效字符。 2. 检查页面路径是否正确,尤其是在进行网站更新或重构后。 3. 检查路由配置是否正确,确保路由规则与请求的URL匹配。 4. 如果是点击链接引起的404错误,可以尝试刷新页面或清除浏览器缓存再次尝试。 5. 如果是网络连接问题导致的404错误,建议等待一段时间后再尝试访问页面。 总之,404错误是常见的网页访问问题,它提示用户所请求的页面不存在或无法找到。不同的原因需要不同的解决方法,用户和网站管理员可以根据具体情况进行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzb20082009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值