You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:55:18