Laravel部署至虚拟主机后storage/logs权限及路径异常求助
看起来你遇到了Laravel部署后常见的缓存残留+权限配置问题,我来一步步帮你解决:
1. 清除服务器上残留的本地缓存文件
你本地运行缓存命令生成的文件里已经硬编码了本地路径,上传到服务器后会导致系统依然读取旧路径。先登录到虚拟主机终端,删除缓存目录里的所有文件:
rm -rf bootstrap/cache/*
如果没有终端权限,也可以通过FTP/文件管理器直接删除bootstrap/cache下的所有文件(别删目录本身)。
2. 修复Storage目录的权限问题
报错里的Permission denied说明服务器上的storage/logs目录要么不存在,要么没有足够的读写权限:
- 先手动创建logs目录(如果不存在的话):
mkdir -p storage/logs
- 然后设置正确的权限,让Web服务器(Apache/Nginx)能读写这些目录:
chmod -R 755 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache
注意:有些虚拟主机的Web用户不是
www-data,比如可能是apache、nginx或者你的cPanel用户名,如果你不确定,可以联系主机服务商确认,或者尝试用chmod -R 775 storage bootstrap/cache(这个权限在共享主机上更通用)。
3. 在服务器上重新生成缓存
千万不要在本地生成缓存再上传!一定要在服务器环境下重新执行缓存命令,确保读取的是服务器的配置:
php artisan config:clear php artisan config:cache php artisan route:clear php artisan view:clear
执行这些命令前,先确认服务器上的.env文件是正确的——里面的配置应该对应服务器环境,而不是你本地的/opt/lampp/htdocs/protech路径。
4. 检查日志配置是否硬编码了本地路径
打开服务器上的config/logging.php文件,检查日志路径的配置,确保是用Laravel提供的storage_path()辅助函数,而不是硬编码的本地绝对路径:
正确的写法应该是:
'path' => storage_path('logs/laravel.log'),
而不是:
'path' => '/opt/lampp/htdocs/protech/storage/logs/laravel.log',
如果是硬编码的路径,改成相对路径的写法,然后再重新执行一次php artisan config:cache。
完成以上步骤后,刷新你的网站或者再尝试执行缓存清理命令,应该就不会再出现本地路径和权限拒绝的错误了。
内容的提问来源于stack exchange,提问作者user9611185

