vue.js单页面 如何遇到404页面如何正确返回状态码404

客户端配置(Vue.js)

在客户端,你可以在 Vue 路由器(vue-router)中设置一个捕获所有未定义路由的规则,显示一个 404 组件,但请注意这不会改变 HTTP 状态码。

import Vue from 'vue';
import Router from 'vue-router';
import NotFound from './components/NotFound.vue';

Vue.use(Router);

const router = new Router({
  mode: 'history',
  routes: [
    // ...其他路由...
    { path: '*', component: NotFound }
  ]
});

export default router;

在这种配置下,当用户访问一个不存在的页面时,他们会看到一个 404 错误页面,但浏览器的 HTTP 状态码仍然是 200。

结论:并没有解决问题

尝试通过Nginx配置解决问题

在 Nginx 中,你可以配置一个规则来捕获所有的前端路由请求,并将它们重定向到 Vue 应用的入口点(通常是 index.html)。然而,要返回 404 状态码给浏览器而不是简单地重定向到首页或错误页面,你需要一些额外的逻辑。

这里是一个基本的 Nginx 配置示例,它处理了将所有非静态文件请求重定向到 index.html,同时保持对静态文件的正常访问:

server {
    listen 80;

    server_name example.com;
    root /path/to/your/vue/app;

    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

这个配置确保了所有的前端路由都会被正确处理,但它并不会返回 404 状态码。要实现返回 404 状态码的逻辑,需要在 Vue 应用中添加服务端渲染的支持;

继续查询资料得出结论如下:

对于纯 Vue.js 开发的单页面应用(SPA),在客户端直接返回 404 状态码是不可能的。这是因为 SPA 的工作原理和服务器配置有关。以下是主要原因和概念的总结:

  1. SPA工作原理: 在 Vue.js 或任何其他 SPA 框架中,页面的路由是由客户端 JavaScript 控制的。当用户在应用内部导航时,实际上并没有向服务器发送新的页面请求。相反,Vue.js 动态地在客户端更新内容,这意味着服务器仅在最初加载应用时参与。

  2. HTTP状态码: HTTP状态码是由服务器在响应HTTP请求时发送的。在SPA中,大部分页面导航不涉及到新的HTTP请求,因此没有机会从服务器返回新的状态码。服务器通常只在加载整个应用时返回200状态码。

  3. 服务器配置: 尽管可以在服务器(如Nginx或Apache)上进行配置,以便于对于某些路由返回404页面,这只适用于服务器接收到实际HTTP请求的情况。对于Vue.js内部的路由,服务器不参与,因此无法直接返回404状态码。

  4. 服务端渲染(SSR): 要在SPA中实现类似的功能(例如,对于不存在的路由返回404状态码),需要使用服务端渲染(SSR)。SSR允许在服务器上渲染页面,这意味着服务器可以根据请求的路由返回不同的状态码。但这需要使用像Nuxt.js这样的框架来实现,这不再是纯 Vue.js 应用。

  5. SEO和用户体验: 尽管不能直接在客户端返回404状态码,但你可以在Vue.js应用内部展示一个404错误页面,以提升用户体验。对于SEO,最好的做法是使用SSR或预渲染页面。

在次尝试nginx方案

  1. 基本 SPA 配置: 配置 Nginx 以重定向所有非静态文件请求到 index.html
  2. 自定义 404 页面: 添加一个配置来处理不存在的路由,展示一个自定义的 404 页面。
server {
    listen 80;
    server_name example.com;
    root /path/to/your/vue/app;

    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    # 自定义404页面
    error_page 404 /custom_404.html;
    location = /custom_404.html {
        internal;
    }
}

在这种配置中,当用户访问一个不存在的页面时,他们会看到 custom_404.html 页面。但请注意,这个方法不会改变HTTP状态码为 404,除非该请求是直接发送到服务器的(例如,用户直接输入一个不存在的URL)。

总结:

  • 对于静态托管的 Vue.js SPA,可以通过配置 Web 服务器(如 Nginx)来显示自定义的 404 页面,但这通常不会改变HTTP状态码(除非是直接的请求)无法实现返回404状态码。

后续解决方案

  • 要彻底解决这个问题,需要结合服务器端渲染(SSR)
  • 通过vue重定向到指定服务端接口,接口返回404 html,并且修改respose code

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【源码复现】《Towards Deeper Graph Neural Networks》

目录 1、论文简介2、论文核心介绍2.1、基本概述2.2、模型介绍 3、源码复现3.1、torch复现3.2、DGL复现 1、论文简介 论文题目——《Towards Deeper Graph Neural Networks》论文作者——Meng Liu, Hongyang Gao & Shuiwang Ji论文地址——Towards Deeper Graph Neural Net…

uni-app 一些实用的页面模板

时间倒计时 <!-- 时间倒计时 --> <template><view class"container"><view class"flex-row time-box"><view class"time-item">{{ laveTimeList[0] }}</view><text>天</text><view class&qu…

Kubernetes实战(十四)-k8s集群扩容master节点

1 Master 高可用架构 Kubernetes 作为容器集群系统&#xff0c;通过健康检查 重启策略实现了 Pod 故障自我修复能力&#xff0c;通过调度算法实现将 Pod 分布式部署&#xff0c;并保持预期副本数&#xff0c;根据 Node 失效状态自动在其他 Node 拉起 Pod&#xff0c;实现了应…

【初阶C++】入门(超详解)

C入门 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用2.3嵌套命名空间 3. C输入&输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理--名字修饰(name Mangling) 6. 引用6.1 引用概念6.2 引用特性6.3 …

最新版ES8的client API操作 Elasticsearch Java API client 8.0

作者&#xff1a;ChenZhen 本人不常看网站消息&#xff0c;有问题通过下面的方式联系&#xff1a; 邮箱&#xff1a;1583296383qq.comvx: ChenZhen_7 我的个人博客地址&#xff1a;https://www.chenzhen.space/&#x1f310; 版权&#xff1a;本文为博主的原创文章&#xff…

多丽特膳:个性化的调减饮品,让你的蜕变之路更轻松

不同的人有不同的体型和健康状态&#xff0c;在我们的生活中存在九种体质&#xff0c;它们分别是平和质、气虚质、阳虚质、阴虚质、痰湿质、湿热质、血瘀质、气郁质、特禀质。体质是指人类个体在形态结构和生理功能方面的相对稳定的特征&#xff0c;它反映了人类个体之间的差异…

【源码解析】flink sql执行源码概述:flink sql执行过程中有哪些阶段,这些阶段的源码大概位置在哪里

文章目录 一. sql执行流程源码分析1. Sql语句解析成语法树阶段&#xff08;SQL - > SqlNode&#xff09;2. SqlNode 验证&#xff08;SqlNode – >Operation&#xff09;3. 语义分析&#xff08;Operation - > RelNode&#xff09;4. 优化阶段&#xff08;RelNode - &…

【活动回顾】ABeam News | 兰州大学外国语学院回访ABeam 旗下德硕管理咨询(上海),持续推进远景合作

访企拓岗深入调研 持续推进远景合作 继11月上旬ABeam旗下艾宾信息技术开发&#xff08;西安&#xff09;团队一行拜访兰州大学并举行隆重的校企签约仪式后&#xff0c;近日兰州大学一行领导也如约莅临德硕管理咨询&#xff08;上海&#xff09;有限公司开展拓岗调研。 深化…

基于FPGA的视频接口之高速IO(SATA)

简介 本章节是对于高速IO接口应用的一个扩展,目前扩展为SATA(SSD硬盘,机械硬盘不能使用)。通俗易懂的讲,即把SSD硬盘当做大型的Nand Flash来处理,不格式化硬盘,直接以地址和数据的格式,在SATA盘中写入数据,该数据不能被Window和linux直接识别,需单独编写App来查看SSD…

Python 小程序之PDF文档加解密

PDF文档的加密和解密 文章目录 PDF文档的加密和解密前言一、总体构思二、使用到的库三、PDF文档的加密1.用户输入模块2.打开并读取文档数据3.遍历保存数据到新文档4.新文档进行加密5.新文档命名生成路径6.保存新加密的文档 四、PDF文档的解密1.用户输入模块2.前提准备2.文件解密…

【C++11】右值引用与移动语义

一.左值与右值 左值&#xff1a;可以取地址的表示数据的表达式&#xff0c;左值可以出现在赋值符号左边 右值&#xff1a;不能取地址的表示数据的表达式&#xff0c;右值不能出现在赋值符号左边 int fun() {return 0; } int main() {int a 0;//a->左值const int b 1;//b-&…

粒子群优化算法的实践 - 多个约束条件

粒子群优化算法的实践 - 多个约束条件 flyfish 粒子群优化算法的实践 - 目标函数的可视化 粒子群优化算法的实践 - 向量减法 在粒子群优化算法的代码实践中 代码写法是 #非线性约束 (x[0] - 1) ** 2 (x[1] - 1) ** 2 - 1<0 constraint_ueq (lambda x: (x[0] - 1) ** 2…

【期末考复习向】transformer的运作机制

1.transformer的encoder运作 transformer的encoder部分包括了输入和处理2大部分。首先是输入部分inputs&#xff0c;这里初始的inputs是采用独热向量进行表示的&#xff0c;随后经过word2vec等操作把独热向量&#xff08;采用独热向量的好处就是可向量是正交的&#xff0c;可以…

Centos7部署SVN

文章目录 &#xff08;1&#xff09;SVN概述&#xff08;2&#xff09;SVN与Samba共享&#xff08;3&#xff09;安装SVN&#xff08;4&#xff09;SVN搭建实例&#xff08;5&#xff09;pc连接svn服务器&#xff08;6&#xff09;svn图标所代表含义 &#xff08;1&#xff09;…

【大数据】详解 AVRO 格式

详解 AVRO 格式 1.Avro 介绍2.schema2.1 原始类型2.2 复杂类型2.2.1 Records2.2.2 Enums2.2.3 Arrays2.2.4 Maps2.2.5 Unions2.2.6 Fixed 3.Avro 的文件存储格式3.1 数据编码3.1.1 原始类型3.1.2 复杂类型 3.2 存储格式3.3 存储格式 4.小结 1.Avro 介绍 Apache Avro 是 Hadoop…

【rabbitMQ】声明队列和交换机

上一篇&#xff1a;springboot整合rabbitMQ模拟简单收发消息 https://blog.csdn.net/m0_67930426/article/details/134904766?spm1001.2014.3001.5501 相关配置环境参考上篇 springAMQP提供了几个类用来声明声明队列&#xff0c;交换机及其绑定关系 声明队列&#xff0c;…

经典策略筛选-20231213

策略1&#xff1a; 龙头战法只做最强&#xff1a;国企改革 ----四川金顶 1、十日交易内出现 涨停或 &#xff08;涨幅大于7个点且量比大于3&#xff09; 2、JDK MACD RSI OBV LWR MTM 六指标共振 3、均线多头 4、 筹码峰 &#xff08;锁仓&#xff09; 5、现价> 五日均…

C语言之文件操作(上)

C语言之文件操作&#xff08;上&#xff09; 文章目录 C语言之文件操作&#xff08;上&#xff09;1. 什么是⽂件&#xff1f;1.1 程序⽂件1.2 数据⽂件1.3 ⽂件名 2. ⼆进制⽂件和⽂本⽂件3. ⽂件的打开和关闭3.1 流和标准流3.1.1 流3.1.2 标准流 4. ⽂件指针5. 文件的打开与关…

什么是连接池?如何确认连接池的大小?

对于我们编写的几乎每个网络或移动应用程序来说&#xff0c;其底层的关键组件之一就是数据库。对于编写使用数据库且高性能且资源高效的应用程序&#xff0c;必须处理一项关键资源&#xff0c;但与 CPU、内存等不同&#xff0c;它通常不是很明显。该资源是数据库连接。 什么是…

调用Win10隐藏的语音包

起因 在做一个文本转语音的Demo的时候&#xff0c;遇到了语音包无法正确被Unity识别的问题。明明电脑上安装了语音包但是代码就是识别不出来 原因 具体也不是非常清楚&#xff0c;但是如果语言包是在的话&#xff0c;大概率是Win10系统隐藏了。 确定语言包 首先查看%windi…