404本质是服务器明确返回“路径未找到”,源于url路径、部署位置与服务配置三者未对齐;常见原因包括href拼写错误、base标签不匹配、本地file://协议限制、框架静态资源目录规则不符及history模式缺失fallback配置。

404 不是“文件丢了”,而是服务器明确告诉你:这个 URL 路径,我查遍整个可服务范围,都没找到对应资源。它本质是路径、部署或配置三者没对齐,不是 HTML 写错了语法。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
href 拼写或解析错误是最常见原因
- 复制粘贴来的链接常带隐藏空格、全角引号“”、中文冒号、不可见 Unicode 字符,浏览器渲染不出,但服务器拒绝加载
-
href="blog"和href="blog/"在多数服务器上是两个不同请求:前者可能被重写为blog.html,后者才尝试找目录索引 - Linux/macOS 服务器严格区分大小写:
about.html≠About.html;Windows 本地双击不报错,但一上服务器就404 -
<base href="/sub/">会全局影响所有相对路径,如果 base 值漏斜杠(如/sub)、多斜杠(如//sub/),或跟构建工具(Vite 的base、CRA 的homepage)不一致,所有跳转和资源引用都会偏移
本地双击打开时看到的“404”根本不是真 404
- 地址栏显示
file:///开头,说明没走 HTTP 协议,压根不会返回404状态码 - 此时控制台报的
Not allowed to load local resource或 iframe 空白,是浏览器安全策略限制,不是路径错 - 真正测试必须用本地服务:
python -m http.server 8000npx serve -snpm run dev(Vite/React/Vue)
然后访问@#@#@#@#@#@#@#@#@#@0
静态资源路径被框架或服务器规则挡住了
- Flask 要求 CSS/JS 图片必须放
static/目录下,且 HTML 中得用{{ url_for('static', filename='style.css') }},硬写./css/style.css必然404 - Django 同理:文件进
static/,模板里用{% static 'images/logo.png' %};放templates/或项目根目录下,开发服务器根本不提供 - Tomcat 只服务
webapps/yourapp/及其子目录,把图片丢在webapps/static/是另一个独立应用,跨上下文引用无效 - Nginx/Apache 若未配
try_files $uri $uri/ /index.html;,前端 history 模式跳转(如/about)刷新就会404
最容易被忽略的一点:你看到的请求 URL,未必是你写的那个
- 打开开发者工具 → Network → 勾选 Preserve log → 点击链接
- 找到标红的请求,点开看 Headers → Request URL —— 这才是服务器真正收到的地址
- 它可能被 JS 动态改过,可能被
<base>补全过,可能被路由重写过 - 右键 → Copy → Copy full URL,粘贴到新标签页直访:如果也
404,问题就在路径本身;如果能打开,说明原页面有 JS 干预或 CSP 拦截
别只盯着 HTML 里写的 href,真实世界里,浏览器发出的请求才是唯一真相。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










