在 Ubuntu 上用 Apache 出现 403 Forbidden,通常不是“权限配置错了”这么简单,而是下面几类原因之一。我按最常见 → 较少见给你梳理,并给出排查方法。
Apache 运行的用户一般是:
www-data
例如你的网站目录是 /var/www/html:
ls -ld /var/www/html
ls -l /var/www/html/index.html
✅ 正确示例:
drwxr-xr-x www-data www-data /var/www/html
-rw-r--r-- www-data www-data index.html
❌ 常见错误:
700root,Apache 读不了sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
即使文件权限正确,Apache 默认可能禁止访问目录。
sudo nano /etc/apache2/sites-enabled/000-default.conf
确保有类似:
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
⚠️ 如果没有 Require all granted,就会 403。
修改后:
sudo systemctl reload apache2
例如:
DocumentRoot /var/www/html
但你实际文件在:
/home/user/www
→ Apache 找不到文件 → 403
✅ 确保:
DocumentRoot 存在<Directory> 指向同一个路径如果你用了 .htaccess:
AllowOverride None
但 .htaccess 里有规则 → 可能 403
✅ 改为:
AllowOverride All
Ubuntu 默认 不用 SELinux(用 AppArmor),但如果你手动开过:
getenforce
如果是 Enforcing,可能需要:
chcon -R -t httpd_sys_content_t /var/www/html
如果目录里没有:
且配置是:
Options -Indexes
→ 403
✅ 解决:
例如:
.php 被当作普通文件php-fpm 没运行可看错误日志:
sudo tail -f /var/log/apache2/error.log
如果你把网站放在:
/home
/media
AppArmor 可能阻止 Apache 读取。
✅ 解决:
/var/www# 1. 错误日志
sudo tail -n 50 /var/log/apache2/error.log
# 2. 权限
ls -ld /var/www/html
# 3. 配置
sudo apache2ctl -S
# 4. 重载
sudo systemctl reload apache2
如果你愿意,可以把下面信息发我,我可以直接帮你定位:
error.log 报错内容我可以一步一步帮你修到不 403。