在 Ubuntu 上 Apache2 报 403 Forbidden 是非常常见的问题,本质原因通常是:Apache 没有权限访问你请求的资源。下面按「最常见 → 不常见」给你系统梳理一下原因和对应解决办法。
Apache 运行的用户是:
www-data
如果你访问的目录或文件,www-data 没有读权限,就会 403。
检查权限:
namei -l /var/www/html/yourdir
修复示例:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
Apache 默认会找:
index.html
index.php
如果目录里没有这些文件,又禁止目录浏览 → 403
解决:
index.html在虚拟主机或 /etc/apache2/apache2.conf 中:
❌ 错误示例:
<Directory /var/www/html>
Require all denied
</Directory>
✅ 正确示例:
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
修改后重启:
sudo systemctl restart apache2
Apache 默认 不允许访问 /home 下目录
解决:
<Directory /home/user/site>
Require all granted
</Directory>
并确保:
chmod 755 /home/user
如果 .htaccess 中有:
Deny from all
或:
AllowOverride None
都会导致 403
✅ 改为:
AllowOverride All
Ubuntu 默认用 AppArmor,一般不会拦,但如果你改过:
sudo aa-status
目录必须至少有 755
sudo chmod +x script.php
# 1. 看错误日志
sudo tail -n 50 /var/log/apache2/error.log
# 2. 看目录权限
namei -l /var/www/html
# 3. 看配置
sudo apache2ctl -S
你可以直接贴:
/var/log/apache2/error.log 中的报错我可以直接告诉你是哪一行配置导致的 403。