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

Laravel中如何从子域名配置主域名的存储路径

Laravel子域名跨域访问文件问题解决方案

1. 确保存储目录共享与权限

  • 两个域名对应的Laravel项目必须共用同一物理存储目录,比如都指向服务器上的/var/www/storage/app/public。如果是独立部署的项目,可通过挂载共享存储或创建软链接实现文件共享。
  • 检查服务器目录权限,确保运行项目的用户(如www-data)对该存储目录拥有读写权限。

2. 配置跨域资源共享(CORS)

主域和子域属于不同源,浏览器会拦截跨域资源请求,需在子域名项目中配置CORS规则:

  • 安装CORS扩展包:
    composer require fruitcake/laravel-cors
    
  • 修改config/cors.php,允许主域名访问:
    return [
        'paths' => ['api/*', 'storage/*'],
        'allowed_origins' => ['https://etest.com'],
        'allowed_methods' => ['GET', 'POST', 'OPTIONS'],
        'allowed_headers' => ['*'],
        'max_age' => 3600,
        'supports_credentials' => false,
    ];
    
  • 在app/Http/Kernel.php的API中间件组中注册CORS中间件:
    protected $middlewareGroups = [
        'api' => [
            \Fruitcake\Cors\HandleCors::class,
            // 其他原有中间件
        ],
    ];
    

3. 统一文件访问URL

  • 子域名项目上传文件时,配置存储磁盘使用子域名的绝对URL:
    修改config/filesystems.php:
    'disks' => [
        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => 'https://recovey-test.com/storage',
            'visibility' => 'public',
        ],
    ];
    
  • 主域名后台直接使用子域名返回的完整文件URL(如https://recovey-test.com/storage/avatar.jpg)展示文件,确保前端请求路径正确。

4. 生成存储目录软链接

两个项目都需执行以下命令,创建存储目录到public目录的软链接:

php artisan storage:link

确保软链接指向的是同一物理存储目录,避免文件不同步。

5. 调试验证

  • 直接在浏览器访问子域名的文件URL,确认文件可正常打开。
  • 在主域名页面加载文件,打开浏览器控制台查看是否有跨域错误,根据提示调整CORS配置或URL路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:16:02