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

Laravel共享主机符号链接失效,图片无法访问求助

问题详情

本地配置与运行情况

修改的文件系统配置:

'local' => [
    'driver' => 'local',
    'root' => public_path('images'),
    'throw' => false,
],
  • 本地环境中,文件上传后存储在public/images目录,上传代码:
    $this->logo->storeAs('brand', 'abc.jpg');
    
  • 本地可通过url('images')生成的链接直接访问图片(如localhost:8000/images/brand/abc.jpg)

线上部署问题

部署到共享主机后图片无法显示,尝试以下路由创建符号链接,执行返回SUCCESS但问题依旧:

Route::get('/link', function () {
    $target = public_path();
    $link = $_SERVER['DOCUMENT_ROOT'] . '/new';
    if (symlink($target, $link))
        die("SUCCESS");
    else
        die("ERROR");
});
解决方案

1. 确认文件存储与权限

  • 登录主机文件管理器,检查public/images/brand/abc.jpg是否存在。若不存在,需给public/images目录设置写入权限(建议755或775),确保上传流程能正常写入文件。

2. 修正符号链接逻辑

你当前的符号链接目标错误,未指向图片存储目录。根据共享主机的网站根目录情况调整:

Route::get('/link', function () {
    $target = base_path('public/images'); // Laravel项目内的图片存储目录
    $link = $_SERVER['DOCUMENT_ROOT'] . '/images'; // 主机根目录下的链接路径
    // 先清理已存在的旧链接
    if (file_exists($link)) unlink($link);
    // 创建新链接并输出错误信息辅助排查
    if (symlink($target, $link)) {
        die("SUCCESS");
    } else {
        die("ERROR: " . error_get_last()['message']);
    }
});

如果主机网站根目录是public_html这类非Laravel默认public目录的路径,直接修改文件系统配置更简单:

'local' => [
    'driver' => 'local',
    'root' => base_path('../public_html/images'), // 指向主机根目录下的images文件夹
    'throw' => false,
],

3. 验证访问路径与重写规则

  • 线上访问图片的正确路径应为https://你的域名/images/brand/abc.jpg,直接在浏览器输入该路径测试:
    • 若返回404,检查目录/文件是否存在,或主机是否启用了URL重写(确保public目录下的.htaccess文件生效,Apache需开启mod_rewrite,Nginx需配置对应重写规则)。

4. 权限细节排查

共享主机上需确保public/images目录的所有者与Web服务器运行用户一致,文件权限设为644,目录权限设为755,部分主机需通过控制面板修改权限而非代码操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:22:15