404.html必须放在web服务器根目录(如nginx的/usr/share/nginx/html、apache的htdocs),命名严格为小写,且需配合error_page(nginx)或errordocument(apache)配置并验证返回真实404状态码;静态托管平台仅识别根目录下纯小写的404.html文件。

404.html 必须放在 Web 服务器根目录下
文件位置错,配置再对也没用。你的 404.html 得直接放在服务器的 DocumentRoot(如 Nginx 的 /usr/share/nginx/html,Apache 的 htdocs)里,不能套在 /pages/404.html 或 /error/404.html 这类子目录中。
常见错误现象:
- 文件实际路径是
/var/www/my-site/404.html,但 Nginx 的root指向的是/var/www→ 访问时会 404 - Windows 上文件显示为
404.html,实则被记事本保存成404.html.txt(隐藏扩展名)→ 服务器找不到 - Linux/macOS 下命名是
404.HTML或About404.html→ 因大小写敏感,匹配失败
Nginx 配置 error_page 并加 internal 保护
只写 error_page 404 /404.html 不够,漏掉 internal 会导致外部可直连 /404.html,返回 200 状态码——这会让搜索引擎收录你的错误页。
正确写法(在 server 块内):
error_page 404 /404.html;
location = /404.html {
internal;
root /usr/share/nginx/html;
}
注意点:
-
root值必须和主 server 的root一致,或明确指向含404.html的绝对路径 - 不要在
location = /404.html里加try_files或重定向,否则破坏 404 状态 - 改完必须执行
sudo nginx -s reload,否则不生效
Apache 用 ErrorDocument 且确保 .htaccess 生效
在网站根目录的 .htaccess 文件里加一行即可,但前提是 Apache 已启用 mod_rewrite 和 mod_alias,且 AllowOverride 允许该目录读取 .htaccess。
关键配置:
ErrorDocument 404 /404.html
要验证是否真起作用:
- 访问一个明显不存在的路径,比如
http://localhost/nonexistent-xyz - 用
curl -I http://localhost/nonexistent-xyz查响应头,必须看到HTTP/1.1 404 Not Found - 如果返回 200 或 302,说明
.htaccess没加载,或路径写成了相对路径(如404.html而不是/404.html)
静态托管平台(GitHub Pages / Netlify / Vercel)只认根目录 404.html
它们不跑完整 Web 服务器,没 error_page 概念,全靠约定:文件名必须是小写的 404.html,且必须在仓库或项目**根目录**,不能嵌套。
典型失效场景:
- GitHub Pages:放
/docs/404.html→ 无效;放/404.html但用了 Jekyll → 需加 front matter:---\npermalink: /404.html\npublished: false\n--- - Netlify:文件名是
404.htm或error-404.html→ 不识别;需配合_redirects或netlify.toml显式声明状态码 - Vercel:默认识别
404.html,但如果项目有src/pages/404.js(Next.js),就优先走它,此时404.html被忽略
本地双击打开 HTML 文件永远看不到真实 404 —— 那只是 file:// 协议,压根没 HTTP 服务参与。必须用 http://localhost 类地址测试。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











