2

我无法访问保存在存储文件夹中的文件。我能够上传、文件、保存文件。例如,如果我运行 size 方法,它会获取上传图像的文件大小,但是在显示文件时,会出现 403 错误。我使用 laravel artisan 命令创建符号链接,我尝试手动创建符号链接。我已经检查以验证跟随符号链接是否在我的 apache 配置中,我可以从 shell cd 进入它,权限是 777(我有它 755,但在试图弄清楚它有什么问题时,我将其更改为 777)符号链接的所有权里面的文件和公共目录中的所有其他文件都是相同的用户和组。

我超级累了,所以也许我只是错过了一些明显的东西,但我一生都无法弄清楚出了什么问题。该文件显然存在,其可见性设置为“公共”。有什么理由可以写目录但不能显示保存在那里的图像吗?

编辑1: 网络

  • 应用程序
  • 引导程序
  • 配置
  • 数据库
  • 错误
  • 节点模块
  • 上市
  • 资源
  • 路线
  • 统计数据
  • 贮存
  • 温度
  • 小贩
  • 是基本结构,public里面有一个符号链接指向storage/app/public

    我的存储文件夹配置的文件系统是:

    'public' => [
                'driver' => 'local',
                'root' => storage_path('app/public'),
                'url' => env('APP_URL').'/storage',
                'visibility' => 'public',
            ],
    

    此时我还没有真正编辑基本 laravel 安装中的任何内容。我确实读过其他人遇到类似问题,说他们的问题是他们不允许访问文档根目录之外的目录。所以他们只是让所有上传到他们的公共文件夹而不是使用存储文件夹。我确实将我的文档根目录设置为我的公用文件夹。这会是个问题吗?(如果需要,我可以编辑我的 apache 文件)

    4

    3 回答 3

    8

    Ok - got some sleep and this morning looked over everything and realized that when logged in as the site owner, everything looks fine, however when logged in as root it shows the link as broken. Basically artisan creates an absolute link, which /storage/app/public is fine as the site owner because its a jailkitted account whose "root" directory is the web folder. However it was actually creating a symlink to the system root, of which the normally account doesn't have access to so it was returning a 403

    Basically I just made the as a relative link instead of an absolute one by removing the broken symlink laravel created and while in the public directory entering: ln -s ../storage/app/public storage

    于 2018-10-06T17:17:30.583 回答
    0

    我遇到了同样的问题,经过大量调试后,我设法确定了导致 403 错误的实际问题。

    解决方法很简单,在

    Config/Filesystem.php 在您定义 public_path 和存储路径的地方,您必须具有相同/相同的 public_path 名称和 storage_path 结束目录名称。

    例子:

    1. 不正确:
    public_path('brands') => storage_path('storage/app/public/brandimages');
    

    这将产生 403 错误,“since public_path(' brands ')”与“storage_path('../../../ brandsimage ')”不同。

    1. 正确的:
    public_path('brands') => storage_path('storage/app/public/brands');
    

    现在 public_path(' brands ') 和 "storage_path('../../../ brands ')" 是相同的,因此会生成正确的符号链接,从而解决 403 错误。

    使用以下工匠命令生成符号链接

    php artisan storage:link
    

    如果需要生成相对链接,请使用以下命令

    php artisan storage:link --relative
    
    于 2021-09-06T08:52:36.977 回答
    0

    我的主机是 clud 服务器,我的站点路径是 /httpdocs

    解决方案对我有用,是:

    从文件夹 /httpdocs/public,执行 ln -s ../storage/app/public storage

    然后一切正常。

    于 2021-11-24T12:48:52.677 回答