Docker环境下Apache2 WEB_DOCUMENT_ROOT配置不生效返回403错误
问题成因
- 站点配置未启用:你在
sites-available目录下添加的000-default.conf默认不会被Apache加载,只有软链接到sites-enabled目录下的配置才会生效。未启用自定义配置时,Apache会使用默认配置,默认的DocumentRoot就是/var/www/html,这就是你在phpinfo中看到的DOCUMENT_ROOT和你配置不符的原因。 - 权限指令版本不兼容:
000-default.conf中使用的Order Allow,Deny是Apache 2.2版本的权限控制指令,Apache 2.4及以上版本统一使用Require all granted做权限控制,混用两个版本的指令会导致权限判定异常。 - 重写模块未启用:你放在
/var/www/html下的.htaccess重写规则依赖mod_rewrite模块,该模块默认未开启的情况下,重写规则不会生效。访问根目录时Apache会直接查找/var/www/html下的索引文件,找不到对应文件且目录索引被禁止时就会返回403错误。 - 目录权限不足:
/var/www/html/webroot目录的所属用户/权限不符合Apache运行要求,Apache默认使用www-data用户运行,没有目录读权限也会触发403错误。
解决方案
- 启用自定义站点配置和重写模块,执行以下命令:
# 启用站点配置 a2ensite 000-default.conf # 启用rewrite模块 a2enmod rewrite # 重启Apache服务,Docker环境无systemctl时使用service apache2 restart systemctl restart apache2
- 修正
000-default.conf中的权限指令,适配Apache 2.4版本,修改后内容如下:
<VirtualHost *:80> DocumentRoot /var/www/html/webroot <Directory /var/www/html/webroot> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> </VirtualHost>
- 修正项目目录权限,给Apache运行用户授予目录读写权限:
chown -R www-data:www-data /var/www/html chmod -R 755 /var/www/html
- 验证配置:重启Apache后再次访问站点根目录,即可正常加载
webroot下的index.php文件。
内容的提问来源于stack exchange,提问作者R0bertinski
相关产品推荐
相关产品推荐

