在 Ubuntu 上搭建 LAMP(Linux + Apache + MySQL + PHP) 环境时,访问网页出现 403 Forbidden 是非常常见的问题。下面按最常见原因 → 排查方法 → 解决办法给你总结一下。
一、最常见原因汇总
1️⃣ Apache 目录权限不足(最常见)
Apache 默认以 www-data 用户运行,如果网站目录没有给它读权限,就会 403。
检查:
ls -l /var/www/html
解决:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
2️⃣ 没有 index 文件(DirectoryIndex 问题)
如果目录里没有 index.html 或 index.php,且未开启目录浏览,就会 403。
解决:
sudo apt install libapache2-mod-php
确保有:
/var/www/html/index.php
或修改 Apache 配置:
DirectoryIndex index.php index.html
3️⃣ Apache 配置中 Require 限制了访问
Ubuntu 的 Apache 默认配置中可能有:
Require all granted
如果是:
Require local
或
Require ip 127.0.0.1
远程访问就会 403。
解决:
sudo nano /etc/apache2/apache2.conf
修改:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
然后:
sudo systemctl restart apache2
4️⃣ .htaccess 或 AllowOverride 问题
如果你用了 .htaccess,但 Apache 没开 AllowOverride:
AllowOverride None
会导致 403。
解决:
AllowOverride All
5️⃣ SELinux(Ubuntu 一般没有,但值得提一句)
Ubuntu 默认 不用 SELinux,用 AppArmor,所以一般不是这个问题。
6️⃣ 访问的是子目录但无权限
例如:
http://ip/test/
但 /var/www/html/test 权限不对。
解决:
sudo chmod 755 /var/www/html/test
7️⃣ 虚拟主机配置错误
如果是自定义 vhost:
sudo nano /etc/apache2/sites-available/xxx.conf
确认:
DocumentRoot /var/www/html
Require all granted
启用:
sudo a2ensite xxx.conf
sudo systemctl reload apache2
二、快速排查流程(推荐)
# 1. 看 Apache 错误日志
sudo tail -n 50 /var/log/apache2/error.log
# 2. 看权限
ls -l /var/www/html
# 3. 看配置
sudo apache2ctl configtest
三、如果你愿意,我可以直接帮你定位
你可以把下面信息发我:
- Ubuntu 版本
- Apache 版本
- 访问的 URL
/var/log/apache2/error.log中的报错内容- 是否是虚拟主机
我可以直接告诉你是哪一条导致的 403。