Laravel部署至生产服务器后无法读写编译Blade文件求助
Laravel 5.5 迁移后 storage/views 读写权限问题解决思路
兄弟,我之前在Laravel 5.5+CentOS 7+Apache的环境下也碰到过一模一样的问题,折腾了好一阵才搞定,给你梳理几个靠谱的排查和解决方向:
先精准确认Apache的运行用户,别想当然默认是apache。执行
ps aux | grep httpd看输出里的用户列,有些自定义配置会改成www-data或者其他用户,权限设置错用户就全白搭了。正确设置目录归属与权限
Laravel的storage和bootstrap/cache目录需要web服务器用户拥有读写权限,两种常用方案:- 直接修改目录归属(适合单用户场景):
记得替换成你实际的项目路径!chown -R apache:apache /path/to/your/laravel/project/storage chown -R apache:apache /path/to/your/laravel/project/bootstrap/cache - 多用户场景(比如你有SSH登录用户):把你的用户加入apache组,再设置组权限:
# 把当前用户加入apache组 usermod -aG apache $(whoami) # 设置目录权限 chmod -R 775 /path/to/your/laravel/project/storage chmod -R 775 /path/to/your/laravel/project/bootstrap/cache # 设置setgid位,确保新生成的文件继承组权限 chmod -R g+s /path/to/your/laravel/project/storage chmod -R g+s /path/to/your/laravel/project/bootstrap/cache
- 直接修改目录归属(适合单用户场景):
别忽略SELinux!这是CentOS 7最容易踩的坑
很多人改完权限还是不行,都是SELinux在搞鬼:- 先检查SELinux状态:
getenforce,如果输出是Enforcing,那大概率是它的问题。 - 临时关闭测试:
setenforce 0,刷新页面看看问题是否解决。如果解决了,别直接永久关闭SELinux(不安全),给目录设置正确的SELinux上下文:
这个命令是授权Apache读写这些目录的标准操作。chcon -R -t httpd_sys_rw_content_t /path/to/your/laravel/project/storage chcon -R -t httpd_sys_rw_content_t /path/to/your/laravel/project/bootstrap/cache
- 先检查SELinux状态:
清除Laravel缓存与编译视图
旧的编译视图文件可能残留权限问题,执行以下命令清理:sudo -u apache php artisan cache:clear sudo -u apache php artisan view:clear sudo -u apache php artisan config:clear用
sudo -u apache执行是为了确保新生成的缓存文件属于apache用户,避免后续权限冲突。检查Apache虚拟主机配置
确保虚拟主机的DocumentRoot指向Laravel项目的public目录,并且在对应的<Directory>块中设置AllowOverride All,不然.htaccess的重写规则不生效,可能引发一些奇怪的访问问题,间接导致权限报错。
内容的提问来源于stack exchange,提问作者blank94




