部署的Laravel8应用无法通过符号链接访问storage目录图片如何解决?
SiteGround部署Laravel 8存储链接403错误解决方案
1. 修正目录权限
403错误绝大多数由权限配置错误导致,执行以下命令修正权限(替换路径为你站点的实际路径):
- 递归修改storage目录权限,目录设为755,文件设为644:
find /home/[你的站点用户名]/[站点根目录]/storage -type d -exec chmod 755 {} \; find /home/[你的站点用户名]/[站点根目录]/storage -type f -exec chmod 644 {} \;
- 修改public下storage软链接的权限:
chmod 755 /home/[你的站点用户名]/[站点根目录]/public/storage
注意不要给目录设置777权限,会有严重安全风险
2. 开启Apache符号链接跟随
SiteGround共享主机默认禁止跟随符号链接,在public/.htaccess文件最开头添加以下配置:
Options +FollowSymLinks
如果添加后报错,就改为:
Options +SymLinksIfOwnerMatch
3. 确认软链接指向正确
你是硬编码创建的软链接,执行以下命令验证指向是否正确:
ls -la /home/[你的站点用户名]/[站点根目录]/public/storage
输出结果里的指向路径必须是/home/[你的站点用户名]/[站点根目录]/storage/app/public的绝对路径,相对路径会导致访问异常,指向错误的话删除现有软链接重新创建即可。
4. 修正存储URL配置
打开config/filesystems.php,确认public磁盘配置如下:
'disks' => [ 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], ]
同时检查.env文件中的APP_URL参数,填写为你站点的完整域名,例如APP_URL=https://yourdomain.com,不要保留本地的localhost配置。
5. 清除缓存
配置修改完成后执行Laravel缓存清除命令:
php artisan config:clear php artisan cache:clear
如果开启了SiteGround面板的静态缓存,也需要在面板中手动清除一次站点缓存。
补充说明:你排查时第6项无输出是正常现象,Storage::url()返回的是HTTP链接,file_exists()仅能识别本地文件路径,无法校验远程链接;第8项图片不显示是因为你错误填入了服务器本地路径作为img的src属性,改为src="{{ asset('storage/imgs/test.jpg') }}"即可。
内容的提问来源于stack exchange,提问作者ParkMoss
相关产品推荐
相关产品推荐

