404错误表示服务器成功接收请求但未找到对应资源,需区分“资源确实不存在”与“服务器误判不存在”:先查network面板中实际请求url,再核对文件路径、服务器配置、权限及前端路由设置。

404 错误不是“网站坏了”,而是服务器明确告诉你:“这个路径,我找不到对应的东西”。排查的关键是先确认它到底是真没文件,还是服务器“以为”没文件——这两类问题的解法完全不同。
看 Network 面板里请求的真实 URL 是什么
浏览器不会按你的想法去拼路径,只认它自己算出来的地址。打开开发者工具(F12)→ Network → 刷新页面,找到标红的 404 请求,点开看 Request URL 字段。
- 如果
Request URL是http://localhost/css/style.css,但你实际把 CSS 放在了assets/css/下,那就是路径写错了 - 如果当前页面 URL 是
http://localhost/blog/post.html,而你写了href="js/app.js",那浏览器会发请求到/blog/js/app.js——不是根目录下的/js/app.js - 本地双击打开 HTML 文件(
file://协议)时,很多相对路径根本不会发出请求,Network 里压根看不到,这种环境没法真实模拟线上行为
检查 HTML 中的 link、script、img 路径是否带斜杠
路径开头有没有 /,决定了解析基准点。不加斜杠是相对当前页面 URL;加了就是从域名根开始算。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
-
href="css/style.css"→ 基于当前页面 URL 拼接,容易错位 -
href="/css/style.css"→ 固定从http://example.com/css/style.css加载,更可控 -
<base href="/subapp/">会全局改变所有相对路径起点,如果构建配置(如 Vite 的base)和它不一致,资源全挂 -
rel="stylesheet"必须全小写、无空格、不能缺,否则浏览器直接忽略该link标签,连请求都不会发
确认 Web 服务器 DocumentRoot 和默认首页设置
哪怕文件放对了位置,服务器也可能“看不见”。常见于本地开发环境(XAMPP、Nginx、Python HTTP server)。
- Apache 要检查
httpd.conf中的DocumentRoot是否指向你放 HTML 的目录 - Nginx 要核对
nginx.conf里的root或alias配置,别漏掉末尾斜杠 - 确保有
DirectoryIndex index.html(Apache)或index index.html;(Nginx),否则访问/时不会自动找index.html - 改完配置必须重启服务,否则无效
区分前端路由 history 模式导致的假 404
Vue Router / React Router 开启 history 模式后,/user/profile 这种 URL 看似正常,但刷新时浏览器会直接向服务器要这个路径——而静态服务器上根本不存在 user/profile.html 文件。
- Nginx 需加
try_files $uri $uri/ /index.html;,把所有非资源请求兜底到index.html - Apache 要启用
mod_rewrite,并在.htaccess里写重写规则 - 如果
Network面板里 404 请求的Content-Type是text/html,且响应体是你的首页内容,基本就是这个原因 - Vercel、Netlify 这类托管平台通常默认支持,但自建 Nginx/Apache 几乎一定需要手动配
最容易被忽略的一点:404 可能不是路径错,而是权限错。比如文件明明存在,但 Nginx 用户没有读取权限,或者 SELinux 限制了访问,服务器照样返回 404,而不是 403。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










