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

Laravel生产环境符号链接已存在但项目中找不到问题解决

问题诊断与解决方案

核心问题分析

  1. 存储链接路径配置错误
    你的filesystems.php中links配置项不符合Laravel默认逻辑:

    'links' => [
        base_path('storage') => storage_path('app/public'),
    ],
    

    Laravel标准配置是public/storage软链指向storage/app/public,而你配置的是项目根目录下的storage文件夹作为链接目标,这直接导致软链创建位置错误,无法实现Web访问。

  2. 文件上传到非公开磁盘
    上传代码使用$image->storeAs()时未指定磁盘,默认使用local磁盘(根目录为storage/app),文件存在storage/app/upload/...路径下,但软链指向的是storage/app/public,所以即使软链正常,也无法通过Web访问这些文件。

  3. 软链"已存在"但不可见的原因

    • 之前创建的软链是断链(目标路径异常或权限不足),部分文件系统会隐藏断链;
    • 生产环境服务器权限限制,导致你无法看到软链;
    • 共享主机环境下,服务商可能禁止根目录级软链或隐藏软链。

分步解决步骤

1. 修正软链配置

修改filesystems.php的links项为标准配置:

'links' => [
    public_path('storage') => storage_path('app/public'),
],

2. 清理错误软链

在生产环境服务器执行命令,删除之前错误创建的软链:

rm -f /path/to/your/project/storage

替换/path/to/your/project为项目实际路径,可通过pwd命令查看当前根目录。

3. 重新创建正确软链

执行Artisan命令生成标准存储软链:

php artisan storage:link

若public目录下看不到storage,可通过以下命令验证软链是否存在:

ls -la public/

输出中若出现storage -> ../storage/app/public条目,说明软链创建成功。

4. 修正上传代码,存储到公开磁盘

修改上传代码,指定使用public磁盘存储,文件会自动保存到storage/app/public目录:

// 指定public磁盘存储文件
$path = $image->storeAs($directory, $filename, 'public');

视图中显示图片时,使用Laravel内置方法生成访问URL:

<img src="{{ Storage::url($sliderImage->image_path) }}" alt="Slider Image">

5. 迁移已上传文件(可选)

若之前已有文件存于storage/app/upload/...,手动将文件移动到storage/app/public/upload/...,并确保数据库中image_path字段路径与新位置匹配。


额外注意事项

  • 确保storage/app/public和public/storage的权限为755,用户组设置为Web服务器用户(如www-data);
  • 共享主机无法创建软链时,可手动在public目录创建storage文件夹,然后在.htaccess添加重写规则:
    RewriteRule ^storage/(.*)$ ../storage/app/public/$1 [L]
    
  • 验证访问:上传新文件后,直接访问https://your-domain.com/storage/upload/sliders/images/xxxx/xx/filename.jpg,检查是否正常显示。

内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:40:16