【问题标题】:Laravel 403 error when displaying images from storage folder显示存储文件夹中的图像时 Laravel 403 错误
【发布时间】:2019-03-11 13:25:23
【问题描述】:

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

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

编辑 1: 网络

  • 应用程序
  • 引导
  • 配置
  • 数据库
  • 错误
  • node_modules
  • 公开
  • 资源
  • 路线
  • 统计数据
  • 存储
  • 温度
  • 供应商
  • 是基本结构,public里面有一个符号链接指向storage/app/public

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

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

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

    【问题讨论】:

    • 你能展示你的项目目录结构吗,我的意思是你在哪里创建了符号链接以及你在哪个存储子目录下存储文件。我想看看你的文件系统配置文件。

    标签: apache laravel-5 laravel-storage


    【解决方案1】:

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

    对我有用的解决方案是:

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

    然后一切正常。

    【讨论】:

      【解决方案2】:

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

      解决方法很简单,在

      配置/文件系统.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
      

      【讨论】:

        【解决方案3】:

        好的 - 睡了一觉,今天早上查看了所有内容,发现当以站点所有者身份登录时,一切看起来都很好,但是当以 root 身份登录时,它显示链接已损坏。基本上,工匠创建一个绝对链接, /storage/app/public 作为网站所有者很好,因为它是一个越狱帐户,其“根”目录是 web 文件夹。然而,它实际上是在创建一个指向系统根目录的符号链接,通常帐户无权访问它,因此它返回了 403

        基本上,我只是通过删除 laravel 创建的损坏符号链接并在公共目录中输入以下内容,将其作为相对链接而不是绝对链接: ln -s ../storage/app/public storage

        【讨论】:

        • 看了 6 个小时后,这对我有用。非常感谢。
        • 非常感谢!
        猜你喜欢
        • 2017-09-03
        • 2020-12-19
        • 2021-02-07
        • 1970-01-01
        • 2018-10-27
        • 2020-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多