Laravel如何将两个网站的Storage链接至项目外同一目录
问题排查与解决方案
1. 修正磁盘配置的根路径
当前shared_disk的root设置为../../upload,这个相对路径是基于Laravel本地磁盘默认的storage/app目录解析的,显然和你的目录结构不匹配。
假设你的目录层级是:
- 根目录 - website1 - app - config - storage - website2 - app - config - storage - shared_disk
那么从website1/storage/app到shared_disk的正确相对路径是../../../shared_disk(从storage/app往上走3层到根目录,再进入shared_disk)。修正后的配置如下:
'disks' => [ 'shared_disk' => [ 'driver' => 'local', 'root' => '../../../shared_disk', 'url' => env('APP_URL').'/shared-storage', 'visibility' => 'public', 'throw' => false, ], ]
2. 配置共享目录权限
先确保shared_disk目录存在,且Web服务进程(如www-data)有读写权限:
# 在根目录创建共享目录 mkdir shared_disk # 设置归属与权限 chown -R www-data:www-data shared_disk chmod -R 755 shared_disk
3. 为每个网站创建软链接
要让上传的文件能通过URL访问,需要把共享目录链接到每个网站的public目录下:
- 针对website1:
cd website1/public ln -s ../../shared_disk shared-storage
- 针对website2:
cd website2/public ln -s ../../shared_disk shared-storage
此操作后,两个网站的public/shared-storage都会指向同一个shared_disk目录,和磁盘配置里的url字段对应。
4. 验证与调试
保持你的上传代码不变,先测试简单上传:
Storage::disk('shared_disk')->put('test.txt', 'test content');
上传成功后,可在shared_disk目录下找到test.txt,并通过http://你的网站域名/shared-storage/test.txt访问文件。
如果仍报错,可通过以下代码打印实际解析的路径,确认路径是否正确:
dd(Storage::disk('shared_disk')->path(''));
内容的提问来源于stack exchange,提问作者jones
相关产品推荐
相关产品推荐

