静态页面报404需同时满足路径匹配、服务器配置正确、返回真实404状态码三条件:文件须在Web根目录对应路径下,区分大小写与扩展名;Nginx/Apache须配置error_page并验证curl响应头为404;GitHub Pages等平台需严格遵循其404文件位置与命名规则。

静态页面报404,不是页面写得不对,而是服务器根本没找到它——关键在路径、配置、状态码三处,缺一不可。
确认文件位置和访问路径是否匹配
本地双击打开 file:/// 路径不会触发404,那只是浏览器读文件;真404只发生在HTTP服务下。必须用 http://localhost/xxx.html 这类地址访问才有效。
- 检查HTML文件是否真在Web服务器根目录下(如Apache的
htdocs、Nginx的/usr/share/nginx/html) - URL中写的路径要和文件系统路径严格一致:比如文件在
/pages/about.html,就得访问http://localhost/pages/about.html - Windows上注意隐藏扩展名,
about.html.txt看起来像about.html,但服务器找不到 - Linux/macOS区分大小写:
About.html≠about.html
Nginx/Apache必须显式配置error_page并验证响应头
只放一个 404.html 文件在根目录,不配服务器,99%的情况返回的是200状态码——搜索引擎当它是正常页,用户刷新也得不到重试提示。
- Nginx正确写法:
error_page 404 /404.html;<br>location = /404.html {<br> internal;<br>}漏掉internal,外部可直连/404.html,状态码就变成200 - Apache用
ErrorDocument 404 /404.html,放在.htaccess或虚拟主机配置里,确保mod_rewrite和mod_alias已启用 - 配完务必用
curl -I http://localhost/nonexistent看响应头,确认是HTTP/1.1 404 Not Found,不是200 OK
IIS或SiteAzure等平台有目录白名单限制
有些托管环境(如SiteAzure 4.x、IIS默认配置)会限制哪些目录能执行或返回HTML文件,upload、assets这类非标准目录常被拦截。
立即学习“前端免费学习笔记(深入)”;
- SiteAzure报404却确认文件存在?查
web.config是否有类似<location path="admin">的限定块,把upload排除在外 - 解决方法是在
web.config中补一段:<location path="upload"><br> <system.webServer><br> <handlers></handlers><br> </system.webServer><br></location>
- IIS Manager里检查「MIME类型」是否允许
.html,以及「默认文档」列表含不含index.html
静态托管平台(GitHub Pages/Netlify/Vercel)路径规则特殊
它们不跑完整Web服务器,自定义404必须严格按平台约定来,否则永远404。
- GitHub Pages:文件必须叫
404.html,且放在仓库根目录;不能放/docs/404.html或/error/404.html - Netlify:要么放根目录
404.html,要么用_redirects文件:/* /404.html 404
或netlify.toml:[[redirects]]<br> from = "/*"<br> to = "/404.html"<br> status = 404
- Vercel:默认支持根目录
404.html,但若用vercel.json自定义路由,需显式加"status": 404
最容易被忽略的是:所有方案都依赖服务器返回真实 404 状态码,而不是靠页面里写个“404”文字糊弄过去。哪怕动画再炫、文案再友好,状态码错了,SEO、缓存、浏览器重试机制全失效。



















