HTML资源404主因是浏览器按当前URL拼接相对路径导致基准偏移,而非代码错误;需用Network面板确认实际Request URL,并优先使用以/开头的绝对路径。

为什么多级目录下相对路径会突然404
不是HTML写错了,是浏览器按当前URL拼接相对路径时,基准变了。比如访问 http://localhost/blog/post-1.html,页面里写 ,浏览器实际请求的是 
/blog/cover.jpg,而不是你放文件的根目录 /cover.jpg 或子目录 /blog/images/cover.jpg。
本地双击打开(file://)不触发这个问题,因为文件系统路径解析和HTTP服务逻辑完全不同;只有走 http:// 才暴露真实行为。
- 用
Network面板确认标红 404 请求的Request URL,这是唯一可信的路径依据 - 所有静态资源引用(
、<script></script>、、)都应优先用绝对路径,以/开头 - 避免
../:Tomcat/Jetty 对上级路径支持极差,Nginx/Apache 也可能因配置限制拒绝解析 - 如果必须用相对路径,确保它相对于当前 HTML 文件所在目录——但上线后一旦 URL 路由变化(如前端 history 模式),就极易断裂
Apache/Nginx 中多级目录 404 的配置陷阱
服务器不会自动“猜”你希望怎么处理嵌套路径。比如你把站点放在 /var/www/myapp/,但 Apache 的 DocumentRoot 指向的是 /var/www/,那么访问 /myapp/blog/post.html 就可能 404——因为服务器在找 /var/www/myapp/blog/post.html,而你实际文件在 /var/www/myapp/ 下的某个子结构里。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 检查
DocumentRoot是否真指向你放 HTML 文件的父目录 - 确认
块中启用了FollowSymLinks和AllowOverride All(Apache),否则.htaccess里的重写或错误页配置不生效 - Nginx 的
location /块若含alias,注意末尾斜杠:用alias /path/to/app/;(带尾部/),别写成alias /path/to/app;(不带),否则多级路径映射会偏移一级 - 部署到 GitHub Pages、Vercel 等平台时,它们只认根目录下的
404.html,不支持/blog/404.html这类子目录自定义页
前端路由 + 多级路径 = 刷新必 404?看服务端 fallback 是否生效
Vue Router 或 React Router 启用 history 模式后,/blog/post-1 这种 URL 在首次加载或跳转时没问题,但刷新页面时,浏览器会向服务器发起真实请求。如果服务器没配 fallback,它就在找一个叫 post-1 的物理文件,自然返回 404。
- Nginx 正确 fallback 写法:
try_files $uri $uri/ /index.html;,且该行必须在location /块内,不能放在location /api/之类子路径里 - Apache 需启用
mod_rewrite,并在.htaccess中写:RewriteRule ^(.*)$ /index.html [L],同时加两行RewriteCond排除真实存在的文件和目录 - 本地开发别用
python -m http.server或npx serve -s测试 history 模式——它们不支持 fallback,要用vite preview或serve -s的替代方案(如http-server -p 8080 -c-1) - 如果部署在 Tomcat,不能靠前端 fallback,得把所有前端路由路径都映射到
index.html,例如在web.xml中配置welcome-file-list并配合 servlet mapping
大小写、编码、隐藏扩展名这些细节最容易漏查
Windows 下测试正常,一上 Linux 服务器就全 404,大概率是大小写问题。另外,中文、空格、ö、ñ 这类字符在 URL 中会被浏览器自动编码(如 café.html → caf%C3%A9.html),但如果你文件系统里存的是未编码的 cafe.html,就对不上。
- Linux/macOS 服务器严格区分大小写:
About.html≠about.html,连CSS文件夹和css都算不同路径 - 禁用 Windows 资源管理器的“隐藏已知文件扩展名”,确认你看到的
index.html不是index.html.txt - 静态资源文件名统一用小写 ASCII 字符,不用空格、括号、中文,命名如
blog-post-1.jpg,而非Blog Post (1).jpg - 用
curl -I http://localhost/blog/post-1.html直接测响应头,确认返回的是HTTP/1.1 200 OK而非404,排除配置未生效
真正卡住人的,往往不是某一行代码,而是浏览器地址栏里那个 http:// 和服务器磁盘路径之间那层看不见的映射关系——它既依赖你写的每个 src 和 href,也依赖你改过的每一行 nginx.conf 或 .htaccess,还受制于部署环境是否区分大小写。少对齐其中一环,就 404。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










