apache虚拟主机报404主因是请求未匹配预期目录,需依次排查:documentroot路径是否存在且权限正确、虚拟主机是否被准确匹配(如缺servername导致兜底错配)、mod_rewrite是否启用且allowoverride all设置到位、selinux等安全模块是否拦截。

Apache 虚拟主机运行 HTML 报 404 Not Found,大概率不是文件丢了,而是请求压根没落到你放文件的那个目录——得先让 Apache “看见”你的文件,再让它“读得懂”路径。
DocumentRoot 是否指向真实且可访问的目录
虚拟主机配置里的 DocumentRoot 必须是物理存在的路径,且 Apache 进程(如 apache 或 www-data 用户)有读取权限。常见错误是路径写错、漏了末尾斜杠,或目录实际不存在。
- 用
ls -ld /var/www/example.com确认目录存在且非空 - 检查
index.html是否真在该目录下:ls /var/www/example.com/index.html - 验证权限:目录需有
rx,文件需有r;临时修复可执行:sudo chown -R apache:apache /var/www/example.com和sudo chmod -R 755 /var/www/example.com - 注意 SELinux:CentOS/RHEL 上可能静默拦截,用
sudo setenforce 0临时关闭测试;若 404 消失,说明是上下文问题,需打标:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?"
虚拟主机是否被正确匹配到
访问 http://your-server-ip/ 却报 404?很可能是 Apache 没匹配上你的虚拟主机,转而用了第一个加载的默认配置(比如 /var/www/html),而你的 HTML 文件根本不在那儿。
- 每个
<virtualhost></virtualhost>块必须明确声明ServerName(如example.com)和可选的ServerAlias(如www.example.com) - 为 IP 直接访问加兜底配置:在
/etc/httpd/conf.d/00-default.conf中放一个最靠前加载的<virtualhost></virtualhost>,设DocumentRoot "/var/www/html"和ServerName localhost - 确认配置已加载:
httpd -S(CentOS/RHEL)或apache2ctl -S(Debian/Ubuntu),看输出里是否列出你的ServerName及对应路径
.htaccess 和 DirectoryIndex 是否生效
即使 index.html 在目录里,如果 Apache 不知道该“默认加载谁”,或者被伪静态规则干扰,也会 404。尤其当你只输 http://example.com/ 而不带 index.html 时,这个环节最关键。
- 确认
DirectoryIndex已设置:在虚拟主机或主配置中检查是否有类似DirectoryIndex index.html index.php的行 - 若依赖
.htaccess(如 WordPress),确保mod_rewrite已启用:a2enmod rewrite或httpd -M | grep rewrite -
<directory></directory>块内必须含AllowOverride All(不能是None)和Options FollowSymLinks -
.htaccess文件必须放在DocumentRoot根目录,且内容无语法错误(比如少个)
浏览器和本地环境是否干扰判断
别急着改服务器,先排除客户端侧“假 404”。有些 404 是浏览器缓存、路径拼写或访问方式导致的,跟服务器配置无关。
- 不要双击打开
file:///路径——这绕过 Web 服务器,必然无法触发 PHP、重写或权限检查;必须用http://localhost/或域名访问 - 硬刷新:macOS 按
Cmd + Shift + R,Windows 按Ctrl + F5,跳过内存缓存直连服务器 - 打开浏览器开发者工具 → Network 标签,看 404 请求的 **Actual Request URL** 是什么,对比你预期的路径,常能发现多了一级
pages/、少了个.html或大小写不一致 - Windows 用户注意隐藏扩展名:
index.html.txt看起来像index.html,但服务器找不到它
真正卡住的地方往往不是“怎么配”,而是“Apache 到底在哪个目录找文件”——httpd -S 输出、DocumentRoot 路径、ServerName 匹配顺序,这三个点串不起来,调一百遍 .htaccess 都没用。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











