Ubuntu 下 Apache2 报 404 一般不是 Apache 本身坏了,而是请求的资源没找到。下面按最常见原因 → 排查方法给你一个系统性的排查清单。
比如:
http://ip/test.html/var/www/html/test.html 不存在✅ 检查:
ls /var/www/html
Apache 默认根目录是:
/var/www/html
如果你配置了 虚拟主机(vhost),默认路径可能已改变。
✅ 查看虚拟主机配置:
ls /etc/apache2/sites-enabled/
cat /etc/apache2/sites-enabled/000-default.conf
重点看:
DocumentRoot /var/www/html
确认你的文件在 DocumentRoot 指定的目录 下。
比如访问:
http://ip/blog/123
但你是 WordPress / Laravel / ThinkPHP 等框架
✅ 检查是否开启 rewrite:
sudo a2enmod rewrite
sudo systemctl restart apache2
并确认 .htaccess 存在且允许覆盖:
<Directory /var/www/html>
AllowOverride All
</Directory>
Apache 用户是 www-data
✅ 修复权限:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
比如访问:
http://ip/mydir/
但目录里没有:
index.html
index.php
index.htm
✅ 解决方式之一:
ls /var/www/html/mydir
或在配置中允许目录浏览(不推荐生产环境):
Options +Indexes
你访问的是:
http://ip:80
但 Apache 监听的是:
sudo netstat -tlnp | grep apache
或:
sudo ss -tlnp | grep apache
比如配置的是:
ServerName example.com
但你直接用 IP 访问 → 命中默认站点 → 找不到路径
✅ 排查:
apache2ctl -S
tail -f /var/log/apache2/error.log
访问一次页面,看日志里提示:
tail -f /var/log/apache2/access.log
确认:
# 1. 服务是否运行
systemctl status apache2
# 2. 文件是否存在
ls /var/www/html
# 3. 访问的是不是正确路径
curl http://localhost
# 4. 是否开启 rewrite
apache2ctl -M | grep rewrite
# 5. 查看日志
tail -n 50 /var/log/apache2/error.log
你可以直接把下面信息贴出来(不用全贴):
/var/log/apache2/error.log 中相关报错我可以直接告诉你是哪一条导致的 404,以及怎么改 ✅