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

Laravel部署到虚拟主机后无法获取storage/public新上传图片

问题排查与解决步骤

旧图片能访问说明已有的软链接逻辑是通的,但新上传图片404,核心问题大概率出在新文件权限或软链接创建的上下文差异上,以下是具体排查和解决方向:

1. 检查新上传文件的权限

虚拟主机环境中,Web服务器(Apache/Nginx)的运行用户与执行上传操作的用户常存在不一致:

  • 登录虚拟主机文件管理器,找到storage/app/public/platforms_logos下的新文件,查看权限(正常应为644)和所属用户组。
  • 如果文件权限是600或者所属用户组不是Web服务器用户(如www-data),Web服务会无法读取文件,直接返回404。
  • 解决方式:在上传代码中添加权限设置,或手动修改文件权限:
    $file = $request->file('logo');
    $filePath = $file->store('platforms_logos', 'public');
    // 上传后设置文件可读权限
    $fullPath = storage_path('app/public/' . $filePath);
    chmod($fullPath, 0644);
    

2. 确认软链接是否正确指向Web根目录

通过路由执行storage:link可能存在路径上下文问题:

  • 部分虚拟主机的Web根目录不是项目根目录下的public,而是public_html,此时Artisan生成的软链接会创建在项目的public目录下,但Web服务实际指向的是public_html,导致链接无效。
  • 手动检查:查看Web根目录(如public_html)下是否存在storage软链接,且指向../storage/app/public(或对应绝对路径)。
  • 若不存在,手动创建软链接(支持SSH的话执行以下命令):
    ln -s /实际项目路径/storage/app/public /实际Web根目录/storage
    
    无SSH权限的话,可临时手动将storage/app/public下的新文件复制到Web根目录对应文件夹(仅临时方案,不推荐长期使用)。

3. 核对filesystems.php与.env配置

确认public磁盘的URL配置匹配虚拟主机环境:
打开config/filesystems.php,检查public磁盘配置:

'public' => [
    'driver' => 'local',
    'root' => storage_path('app/public'),
    'url' => env('APP_URL').'/storage',
    'visibility' => 'public',
],
  • 确保.env文件中的APP_URL设置为虚拟主机的完整域名(如https://your-domain.com),避免生成的图片URL路径错误。

4. 清除配置与路由缓存

虚拟主机环境中,旧缓存可能导致配置未生效:
有SSH权限的话执行以下命令:

php artisan cache:clear
php artisan config:clear

无SSH权限可临时添加路由执行清理:

Route::get('clear-cache', function () {
    \Artisan::call('cache:clear');
    \Artisan::call('config:clear');
    dd("缓存已清除");
});

内容的提问来源于stack exchange,提问作者Osama El Emam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:12:19