Apache返回404主因是DocumentRoot、DirectoryIndex与文件实际路径未对齐:需确认DocumentRoot指向正确目录、DirectoryIndex包含.html、文件名大小写及扩展名完全匹配,并重启服务验证。

Apache 运行 HTML 出现 404 Not Found,基本可以确定:文件路径没错、服务器在跑、网络通,但 Apache 就是“看不见”那个 HTML 文件。问题不在浏览器,而在 Apache 怎么找文件——重点查 DocumentRoot、DirectoryIndex 和实际文件位置这三者的对齐关系。
确认 DocumentRoot 是否指向 HTML 文件所在目录
Apache 不会自动猜你把网页放哪儿了,它只在 DocumentRoot 指定的目录里找。常见错误是把文件丢进了 /var/www/html/,但配置里写的是 /srv/www/htdocs/,或者用 XAMPP 却没注意 Windows 下默认根目录其实是 XAMPP\htdocs 而非项目文件夹。
- 打开 Apache 配置文件:
httpd.conf(Linux/macOS)或conf\httpd.conf(Windows XAMPP) - 搜索
DocumentRoot,确认其值与你存放index.html的物理路径完全一致(末尾不带斜杠) - 紧接着检查下方的
<directory></directory>块,引号内的路径必须和DocumentRoot完全相同 - 改完必须重启 Apache:
sudo systemctl restart apache2(Linux)或点 XAMPP 控制面板的 Restart
检查 DirectoryIndex 是否包含 .html 扩展名
当你访问 http://localhost/ 时,Apache 默认尝试加载 DirectoryIndex 列出的第一个文件。如果配置里只有 index.php,而你放的是 index.html,它就不会自动命中——结果就是 404,哪怕文件明明存在。
- 在
httpd.conf中搜索DirectoryIndex - 确保行末包含
.html,例如:DirectoryIndex index.html index.htm index.php - 如果只写了
DirectoryIndex index.php,访问/就永远找不到index.html - 修改后同样需要重启 Apache
验证文件名、大小写和扩展名是否完全匹配
Apache 在 Linux/macOS 上严格区分大小写;Windows 下虽不敏感,但部署到生产环境(通常是 Linux)就会暴露问题。另外,Windows 资源管理器默认隐藏扩展名,容易误存为 index.html.txt。
立即学习“前端免费学习笔记(深入)”;
- 用终端进入
DocumentRoot目录,执行:ls -l,看文件名是否真叫index.html(不是Index.HTML或index.htm) - 在 Windows 上,打开文件夹选项 → “查看” → 勾选“文件扩展名”,确认没有隐藏的
.txt - 浏览器地址栏输入完整路径测试:
http://localhost/index.html,而非只输http://localhost/—— 这能绕过DirectoryIndex,直接验证文件是否存在
用 curl 和 Network 面板交叉验证真实请求路径
有时候你以为的路径,和浏览器实际发出去的请求路径,根本不是一回事。比如相对路径写错、base 标签干扰、或前端路由劫持了 URL。
- 在终端运行:
curl -I http://localhost/index.html,看返回的HTTP/1.1 404 Not Found还是200 OK - 在浏览器中按
F12→ Network → 刷新页面 → 找到状态码为404的请求 → 点开它 → 查看 Headers 里的Request URL - 把这个 URL 复制出来,和你服务器上文件的绝对路径逐字符比对:协议、域名、端口、路径斜杠、大小写、有无多余空格
- 特别注意:如果 URL 是
http://localhost/pages/about.html,那文件就必须在DocumentRoot/pages/about.html,不能只放在DocumentRoot/下
最常被忽略的一点:改了配置却没重启 Apache,或者改了文件却没刷新浏览器缓存(尤其是 404 页面容易被强缓存)。别跳过重启和服务验证这一步——它不是仪式,是必经链路。



















