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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:40:30