404错误本质是服务器未找到资源,需同时满足文件位置正确、url路径严格匹配、服务器配置识别三条件;本地file:///打开无真实404,必须通过http服务访问并验证响应头为404状态码。

404错误不是页面写错了,而是服务器压根没找到那个路径——必须同时满足“文件真在那儿”“路径写对了”“服务器配置认得它”三个条件,缺一不可。
确认文件位置和访问路径是否严格匹配
本地双击 file:/// 打开 HTML 不会触发真实 404,那只是浏览器读文件;真 404 只发生在 http://localhost/xxx.html 这类 HTTP 请求下。
- HTML 文件必须放在 Web 服务器认定的根目录里:Apache 是
htdocs,Nginx 是/usr/share/nginx/html,Tomcat 是webapps/yourapp/ - URL 路径要和文件系统路径一字不差:
/pages/about.html就必须访问http://localhost/pages/about.html,少个/pages/就 404 - Windows 上注意隐藏扩展名:看起来是
about.html,实际可能是about.html.txt;Linux/macOS 区分大小写:About.html≠about.html
Nginx/Apache 必须显式配 error_page 并验证响应头
只放一个 404.html 在根目录,不配服务器,99% 的情况返回的是 200 OK ——搜索引擎当它是正常页,用户刷新也得不到重试提示。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- Nginx 正确写法:
error_page 404 /404.html;+location = /404.html { internal; }(漏掉internal,外部可直连/404.html,状态码就变200) - Apache 用:
ErrorDocument 404 /404.html,放在.htaccess或虚拟主机配置里,确保mod_alias已启用 - 配完必须用
curl -I http://localhost/nonexistent验证响应头,确认是HTTP/1.1 404 Not Found,不是200 OK
前端跳转或 History 模式导致的伪 404
点击链接或调用 location.href 后跳到空白页并报 404,大概率不是后端问题,而是前端路径拼错或服务端没 fallback。
-
location.href = "user/profile"是相对路径,当前在/admin/下,实际请求的是/admin/user/profile;改用绝对路径:location.href = "/user/profile" - Vue Router / React Router 开启 history 模式后,刷新
/about会直接向服务器发请求;Nginx 必须加try_files $uri $uri/ /index.html;,否则必然 404 - 前后端同域部署时(如都走
https://api.example.com),前端跳/order/list可能被后端同名 API 路由提前捕获,看 Network 里响应头Content-Type是application/json还是text/html
静态托管平台(GitHub Pages/Netlify/Vercel)有硬性命名与位置规则
它们不跑完整 Web 服务器,自定义 404 必须严格按平台约定来,否则永远 404。
- GitHub Pages:文件必须叫
404.html,且放在仓库根目录;/docs/404.html或/error/404.html都无效 - Vercel/Netlify 默认支持 history fallback,但本地用
npx serve或python -m http.server就不支持,必须换vite preview这类工具 - 所有静态托管平台都不支持动态设置 HTTP 状态码,
404.html页面本质仍是200响应,仅作视觉兜底
最容易被忽略的点是:你以为页面“显示了 404 提示”,其实服务器返回的是 200 OK;验证必须看响应头,不能只看页面内容。很多 SEO 问题和缓存异常,都源于这个状态码没对上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










