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

Laravel存储与public文件夹不同步问题求助

解决Linux环境下Laravel Storage文件无法访问的问题

嗨,这种跨系统迁移后存储链接失效的问题我之前也碰到过,大概率是Linux软链接的权限或者路径配置问题,咱们一步步来排查:

1. 先确认软链接是否真的有效

先登录你的Linux服务器,到项目根目录执行这个命令,查看public文件夹下的软链接状态:

ls -la public/

如果看不到storage -> ../app/storage/public这样的条目,说明之前的php artisan storage:link根本没创建成功;如果条目存在但显示红色,那就是链接权限或者路径有问题。

2. 手动重建软链接(最有效的解决方法)

有时候Laravel的artisan命令会因为用户权限问题(比如你用SSH用户执行,但Web服务器用的是www-data用户)创建失败,建议这么操作:

  • 先删掉public下旧的storage链接(如果有的话):
rm public/storage
  • 用Web服务器的运行用户来创建链接,比如Nginx/Apache一般用www-data:
sudo -u www-data php artisan storage:link

要是还是不行,直接用绝对路径手动创建软链接(Linux下绝对路径比相对路径靠谱多了):

ln -s /你的项目绝对路径/app/storage/public /你的项目绝对路径/public/storage

⚠️ 这里一定要替换成你自己的项目真实路径,比如/var/www/your-project/这种,别用相对路径,这也是Windows正常但Linux不行的核心原因之一——Windows的快捷方式对路径容错性更高。

3. 修复目录权限

Linux下Web服务器需要能读写storage目录,执行这两个命令确保权限正确:

chmod -R 755 app/storage/
chown -R www-data:www-data app/storage/

这样Web服务器用户(www-data)才能正常读取和写入storage里的文件,不然就算文件存进去了,也会因为权限问题返回404。

4. 检查.env配置

打开你的.env文件,确认FILESYSTEM_DISK设置的是public:

FILESYSTEM_DISK=public

如果不小心设成了local,文件会存在storage/app/local目录下,自然没法通过public/storage访问。

为什么Windows正常?

Windows的符号链接(快捷方式)和Linux的软链接机制完全不同,Windows对路径和权限的要求没那么严格,哪怕用相对路径或者权限有点问题,大概率都能正常工作,但Linux对软链接的路径准确性、权限控制更严谨,所以迁移后就暴露了这些隐藏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:02:51