Laravel项目部署在Apache环境下因权限问题导致文件找不到的解决方案求助
嘿,兄弟,我来帮你捋捋这个问题!从你给出的错误信息和操作来看,你现在的问题核心不是单纯开777权限就能解决的,得从Apache运行身份和文件系统权限的匹配度入手,我给你几个具体的排查和解决步骤:
先把777权限改回去! 这权限太不安全了,而且很多服务器的安全策略会直接忽略777的设置,反而起反作用。赶紧把
/home改回755,/home/affy改回750这类合理的权限值。检查Apache的运行用户和用户组
先登录服务器,执行ps aux | grep apache或者ps aux | grep httpd,找到Apache进程的运行用户(一般是www-data、apache或者httpd这类)。然后把你的项目目录以及相关上级目录的所属用户组改成这个Apache用户组。
比如如果Apache运行用户是www-data,就执行:chown -R affy:www-data /home/affy/domains/****/public_html这样Apache进程才能正常读取项目里的文件。
修复vendor目录的权限和完整性
你报错的路径指向了vendor包里的文件,有可能是用FTP用户身份安装依赖的,导致Apache用户读不到。你可以切换到服务器命令行,用Apache用户身份(或者root)重新执行composer dump-autoload,或者干脆删掉vendor目录和composer.lock,重新跑一遍composer install,确保依赖文件的所属权和权限是对的。排查SELinux的限制
很多Linux服务器默认开了SELinux,它会限制进程的文件访问范围,就算你改了目录权限,SELinux策略也可能阻止Apache读取某些路径。你可以先临时关闭SELinux试试:setenforce 0如果关闭后问题解决了,就给项目目录添加SELinux安全上下文:
chcon -R -t httpd_sys_content_t /home/affy/domains/****/public_html然后再把SELinux打开(
setenforce 1),这样既保证安全又能正常访问文件。检查路径里的相对路径和软链接
报错里的路径用了相对路径(比如src/../config),有可能中间存在软链接,而Apache用户没有权限访问软链接指向的真实路径。你可以把路径展开成绝对路径,直接去服务器上看看/home/affy/domains/****/public_html/vendor/itstructure/laravel-multi-menu/config/multimenu.php这个文件是不是真的存在,权限有没有问题。
我之前遇到过几乎一模一样的情况,就是Apache用户组没设置对,改完就正常了,你按这个顺序排查试试!
备注:内容来源于stack exchange,提问作者Omer Sade

