- 技术层面: 如何让一个网页的服务器返回“404 Not Found”的错误状态码。
- 视觉/用户体验层面: 如何让一个已经存在的网页,在用户浏览器中显示成类似404错误页面的样子。
下面我将从这两个层面,为你提供详细的、可操作的方法。

技术层面 - 让服务器返回404错误
这是最正宗、最标准的“404”实现方式,当服务器返回HTTP状态码404 Not Found时,浏览器会知道这个资源不存在,并通常会显示一个默认的或自定义的404错误页面。
方法1:通过服务器配置(推荐)
这是最专业、最正确的方法,适用于所有网站服务器。
A. Apache 服务器
- 删除或重命名文件/文件夹: 最简单的方法,就是直接从服务器上删除你想要返回404的那个文件或目录。
- 创建一个自定义的404页面:
- 创建一个美观的HTML页面,例如命名为
html,并上传到你的网站根目录(或任何你喜欢的地方)。 - 在你的
.htaccess文件(通常在网站根目录)中添加以下代码:ErrorDocument 404 /404.html
- 任何访问不存在的文件或路径的用户,都会被引导到你自定义的
html页面。
- 创建一个美观的HTML页面,例如命名为
B. Nginx 服务器
- 删除或重命名文件/文件夹: 同样,直接删除文件是最直接的方式。
- 创建一个自定义的404页面:
- 创建你的
html页面。 - 在你的 Nginx 配置文件(
nginx.conf或站点配置文件)的server块中添加以下指令:error_page 404 /404.html; location = /404.html { internal; root /path/to/your/website; # 指向你的网站根目录 } - 修改后需要重新加载 Nginx 配置:
sudo nginx -s reload。
- 创建你的
方法2:通过编程语言动态返回
如果你正在使用后端语言(如 PHP, Python, Node.js, Java 等),可以在代码中主动设置响应状态码。
A. PHP 示例
<?php
// 设置HTTP响应状态码为404
http_response_code(404);
// 然后可以包含你的自定义404页面内容
include('path/to/your/404_page.html');
// 或者直接输出一段HTML
?>
<!DOCTYPE html>
<html>
<head>404 - 页面未找到</title>
</head>
<body>
<h1>抱歉,您访问的页面不存在。</h1>
</body>
</html>
<?php
// 脚本在此处结束,防止后续代码被执行
exit;
?>
B. Python (Flask) 示例
from flask import Flask, render_template, abort
app = Flask(__name__)
@app.route('/non-existent-page')
def show_404():
# abort(404) 会抛出一个HTTP异常,Flask会自动捕获并渲染404.html模板
abort(404)
# 确保你的项目文件夹下有一个 templates/404.html 文件
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 404
if __name__ == '__main__':
app.run(debug=True)
C. Node.js (Express) 示例
const express = require('express');
const app = express();
// 定义一个不存在的路由
app.get('/something-that-does-not-exist', (req, res) => {
// 手动设置状态码并发送响应
res.status(404).send('<h1>404 - Not Found</h1><p>哎呀,这个页面飞走了!</p>');
});
// 也可以使用内置的404处理中间件,它会捕获所有未处理的请求
app.use((req, res, next) => {
res.status(404).sendFile(__dirname + '/404.html'); // 假设你有一个404.html文件
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
视觉/用户体验层面 - 让页面“看起来”像404
这种方法适用于一个已经存在的、正在正常运行的网页,你不想让它返回404错误,而是希望用户在这个页面上看到类似404错误的信息,这通常用于A/B测试、恶作剧、或者一个特殊的活动页面。

方法1:纯前端实现(最简单)
直接在HTML、CSS和JavaScript中操作,无需服务器任何改动。
HTML (index.html):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">页面消失了</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="error-container">
<h1>404</h1>
<p>抱歉,您访问的页面已迷失在互联网的海洋中。</p>
<a href="/">返回首页</a>
</div>
<script src="script.js"></script>
</body>
</html>
CSS (style.css):
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
color: #333;
}
.error-container {
text-align: center;
}
.error-container h1 {
font-size: 8em;
color: #ff6b6b;
margin: 0;
line-height: 1;
}
.error-container p {
font-size: 1.5em;
margin: 20px 0;
}
.error-container a {
display: inline-block;
padding: 10px 20px;
background-color: #4ecdc4;
color: white;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s;
}
.error-container a:hover {
background-color: #45b7aa;
}
JavaScript (script.js):

// 可选:添加一些动态效果
window.addEventListener('load', () => {
document.querySelector('.error-container').style.opacity = '0';
document.querySelector('.error-container').style.transform = 'translateY(20px)';
setTimeout(() => {
document.querySelector('.error-container').style.transition = 'all 0.8s ease-out';
document.querySelector('.error-container').style.opacity = '1';
document.querySelector('.error-container').style.transform = 'translateY(0)';
}, 100);
});
方法2:使用服务器端模板(如PHP, JSP等)
如果你的网站是用PHP等语言构建的,你可以在不改变URL的情况下,在页面顶部加上逻辑判断,然后输出404样式的HTML。
PHP 示例:
<?php
// 假设这个页面在某些条件下需要显示成404
$show_as_404 = true; // 这个条件可以来自数据库、配置文件或用户输入等
if ($show_as_404) {
// 注意:这里我们不设置 http_response_code(404),因为那样浏览器地址栏的URL会变成404.html
// 我们只是输出一个404样式的页面
?>
<!DOCTYPE html>
<html>
<head>
<title>404 - 页面未找到</title>
<style>
/* 这里放上面CSS里的样式 */
</style>
</head>
<body>
<div class="error-container">
<h1>404</h1>
<p>该页面正在维护中,请稍后再试。</p>
<a href="/">返回首页</a>
</div>
</body>
</html>
<?php
// 结束脚本执行,防止下面的代码运行
exit;
}
?>
<!-- 正常的页面内容 -->
<h1>正常页面内容</h1>
<p>只有当 $show_as_404 为 false 时才会显示。</p>
总结与选择
| 方法 | 目的 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 服务器配置 | 让服务器返回真实的404状态码 | 标准、专业,对SEO友好(告知搜索引擎此页不存在) | 需要服务器权限,操作稍复杂 | 网站维护、文件移动后、URL结构调整 |
| 编程语言 | 让应用返回真实的404状态码 | 灵活,可根据业务逻辑动态决定 | 需要后端开发知识 | 动态网站,如用户访问了不存在的个人资料页 |
| 纯前端 | 让页面本身**看起来**像404 | 简单、快速,不影响服务器和URL | 不会返回404状态码,对SEO不友好,用户知道URL是正确的 | 恶作剧、A/B测试、特殊活动页面、内部工具 |
| 服务器端模板 | 让页面本身**看起来**像404 | 比纯前端更灵活,可结合后端逻辑 | 同样不返回404状态码 | 根据用户权限或配置,动态改变页面显示内容 |
- 如果你想真正地告诉世界这个页面不存在,请使用层面一的方法(服务器配置或编程)。
- 如果你想在页面上给用户一个“找不到”的视觉体验,但又不改变URL,请使用层面二的方法(纯前端或服务器端模板)。
