Laravel 10共享主机部署:symlink符号链接失效问题求助
Laravel共享主机部署:Storage软链失效解决方案
你遇到的是共享经销商套餐环境下,Laravel存储软链无法正常访问的问题,结合你的部署结构,以下是几个可行的解决办法:
1. 修正软链创建的路径逻辑
你之前的路由代码依赖$_SERVER['DOCUMENT_ROOT']可能存在路径偏差,既然已经在AppServiceProvider中绑定了path.public到public_html,建议用Laravel内置函数确保路径准确,修改路由代码如下:
Route::get('/linkstorage', function () { $targetFolder = base_path('storage/app/public'); $linkFolder = public_path('storage'); // 避免重复创建报错 if (!file_exists($linkFolder)) { symlink($targetFolder, $linkFolder); return 'Storage 软链创建成功'; } return 'Storage 软链已存在'; });
访问该路由后,检查public_html/storage是否正确指向项目目录下的storage/app/public。
2. 确认主机是否允许创建软链
多数共享主机默认禁用symlink函数,如果路由执行报错(权限拒绝),可以:
- 打开主机控制面板(如cPanel)的文件管理器,右键
public_html目录,选择「创建符号链接」,目标路径设为[你的项目目录]/storage/app/public,链接名称填storage。 - 直接联系主机服务商,请求开启
symlink权限或协助创建该软链。
3. 检查目录权限设置
确保以下目录权限配置正确:
- 项目目录下的
storage/app/public:目录权限设为755,文件权限设为644 public_html/storage软链(或手动创建的目录):权限同样设为755- 确认web服务器用户(如
www-data、apache)拥有这些目录的读写权限,部分主机需将文件所有者改为服务器用户组。
4. 软链不可用的替代方案
如果主机完全禁止软链,可修改Laravel文件系统配置绕过软链:
打开config/filesystems.php,找到disks下的public配置,修改为:
'public' => [ 'driver' => 'local', 'root' => public_path('storage'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],
然后在public_html下手动创建storage目录,上传的文件会直接保存到该目录,无需软链即可直接访问。
内容的提问来源于stack exchange,提问作者Bervetuna
相关产品推荐
相关产品推荐

