You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7中Apache未按httpd.conf配置读取DocumentRoot的问题求助

解决Laravel部署在CentOS7上的Forbidden权限问题

看起来你遇到的问题核心是目录权限链不完整加上SELinux的限制,导致Apache没法正常访问到public目录下的.htaccess,反而误去上级目录查找。下面一步步来解决:

1. 修复目录权限链

Apache运行的用户(CentOS7里默认是apache)需要对整个目录路径有执行权限(x权限)才能遍历到public目录,同时public目录和内部文件需要有可读权限。执行以下命令:

# 给整个项目目录设置正确的所有者和组
chown -R apache:apache /var/www/html/myProject

# 给所有目录设置755权限(所有者可读可写可执行,组和其他可读可执行)
find /var/www/html/myProject -type d -exec chmod 755 {} \;

# 给所有文件设置644权限(所有者可读可写,组和其他可读)
find /var/www/html/myProject -type f -exec chmod 644 {} \;

# 单独确保public目录权限正确
chmod 755 /var/www/html/myProject/public

2. 确认Apache的AllowOverride配置

虽然你已经修改了DocumentRoot,但要确保public目录的配置段里开启了AllowOverride All,这样Apache才会读取public下的.htaccess文件。

打开/etc/httpd/conf/httpd.conf,找到你设置的<Directory "/var/www/html/myProject/public">段落,确保内容包含:

AllowOverride All
Require all granted

修改完成后重启Apache:

systemctl restart httpd

3. 处理SELinux限制

CentOS7默认开启SELinux,这是很多权限问题的“隐形杀手”,即使文件权限看起来正确,SELinux也可能阻止Apache访问文件。

先临时关闭SELinux测试(重启服务器后会恢复默认状态):

setenforce 0

如果此时能正常访问项目,说明确实是SELinux的问题。接下来设置永久规则,让Apache有权访问项目目录:

# 给项目目录添加httpd允许访问的SELinux上下文标签
semanage fcontext -a -t httpd_sys_content_t "/var/www/html/myProject(/.*)?"

# 应用标签到目录
restorecon -Rv /var/www/html/myProject

4. 清理多余的.htaccess文件

检查/var/www/html/myProject根目录下是否存在多余的.htaccess文件,如果有的话建议删除——Laravel的.htaccess本来就应该在public目录下,上级目录的.htaccess会干扰Apache的路径解析。

完成以上步骤后,再次重启Apache,应该就能通过服务器IP正常访问你的Laravel项目了。

内容的提问来源于stack exchange,提问作者shay k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:06:55