You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express中如何显示404页面并返回404状态码

当然搞定过!我之前做项目时也碰到过这个需求——一开始也是用302跳转到404页面,后来发现这样对SEO不太友好,而且用户体验也不如直接显示页面来得顺畅,折腾了几种方案终于搞定了,给你分不同场景说说怎么实现:

不同服务器/框架的实现方案

Nginx 配置

如果你的网站是用Nginx部署的,大概率之前的配置里用了return 302 /404.html这类重定向规则,要改成直接返回自定义404页面并设置404状态码:

在你的server配置块里添加或修改以下规则:

# 指定404错误时返回的页面
error_page 404 /custom-404.html;

# 确保这个页面只能被内部错误触发,禁止用户直接访问它时也返回404
location = /custom-404.html {
    root /path/to/your/webroot; # 替换成你的网站根目录路径
    internal;
}

internal指令是关键,它能防止用户直接输入http://my-domain.com/custom-404.html时也返回404状态,同时保证当访问不存在的路径时,Nginx直接输出该页面内容,状态码为404,不会产生302跳转。

Apache 配置

如果用Apache,直接通过.htaccess配置就能实现:

# 直接指定404错误对应的页面
ErrorDocument 404 /custom-404.html

# 注意:如果之前有导致302重定向的规则(比如RewriteRule ^.*$ /404.html [R=302,L]),一定要删掉这些规则

Apache会自动在用户访问不存在的路径时,输出custom-404.html的内容,并返回404状态码,完全不会触发重定向。

Node.js/Express 框架处理

如果你的网站是基于Express开发的,之前可能用了res.redirect('/404')来跳转到404页面,这会返回302状态码。改成下面的写法:

// 把这个中间件放在所有路由的最后,处理所有未匹配的请求
app.use((req, res) => {
    // 先设置404状态码,再渲染自定义404页面(如果用模板引擎的话)
    res.status(404).render('404', { pageTitle: '页面未找到' });
    
    // 如果是静态HTML文件,用sendFile方法:
    // const path = require('path');
    // res.status(404).sendFile(path.join(__dirname, 'public', 'custom-404.html'));
});

这样处理后,客户端会直接收到404状态码和自定义页面的内容,没有任何跳转。

PHP 项目处理

如果是PHP驱动的网站,之前可能用了header("Location: /404.html", true, 302);来重定向,替换成下面的代码:

<?php
// 先设置404响应状态码
http_response_code(404);
// 输出自定义404页面的内容
include 'custom-404.html';
exit;
?>

这个逻辑很简单:先告诉服务器返回404状态,再输出页面内容,完全避免了重定向。

核心要点总结

不管用哪种环境,核心都是不要用重定向指令,而是在当前的请求上下文里直接输出自定义404页面的内容,同时确保响应头的状态码被设置为404。这样就能实现和Google一样的效果——访问不存在的路径时,直接显示404页面,返回404状态码。

内容的提问来源于stack exchange,提问作者Tamiross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:56:12