菜鸟科技网

如何使网页变成404

  1. 技术层面: 如何让一个网页的服务器返回“404 Not Found”的错误状态码。
  2. 视觉/用户体验层面: 如何让一个已经存在的网页,在用户浏览器中显示成类似404错误页面的样子。

下面我将从这两个层面,为你提供详细的、可操作的方法。

如何使网页变成404-图1
(图片来源网络,侵删)

技术层面 - 让服务器返回404错误

这是最正宗、最标准的“404”实现方式,当服务器返回HTTP状态码404 Not Found时,浏览器会知道这个资源不存在,并通常会显示一个默认的或自定义的404错误页面。

方法1:通过服务器配置(推荐)

这是最专业、最正确的方法,适用于所有网站服务器。

A. Apache 服务器

  1. 删除或重命名文件/文件夹: 最简单的方法,就是直接从服务器上删除你想要返回404的那个文件或目录。
  2. 创建一个自定义的404页面:
    • 创建一个美观的HTML页面,例如命名为 html,并上传到你的网站根目录(或任何你喜欢的地方)。
    • 在你的 .htaccess 文件(通常在网站根目录)中添加以下代码:
      ErrorDocument 404 /404.html
    • 任何访问不存在的文件或路径的用户,都会被引导到你自定义的 html 页面。

B. Nginx 服务器

  1. 删除或重命名文件/文件夹: 同样,直接删除文件是最直接的方式。
  2. 创建一个自定义的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测试、恶作剧、或者一个特殊的活动页面

如何使网页变成404-图2
(图片来源网络,侵删)

方法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):

如何使网页变成404-图3
(图片来源网络,侵删)
// 可选:添加一些动态效果
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,请使用层面二的方法(纯前端或服务器端模板)。
分享:
扫描分享到社交APP
上一篇
下一篇