如何解决Laravel:将上传文件夹移出 public_html 文件夹
我的项目文件夹结构如下:
. └── /home (Inaccessible) └── user └── public_html ├── app ┊ ├── public │ ├── css │ ┊ │ └── upload ┊ ├── .htaccess └── .env
如你所见,项目上传文件夹在public文件夹下,以下代码显示了我的公盘规格:
'disks' => [
'public' => [
'driver' => 'local','root' => public_path('upload'),'url' => env('APP_URL').'/upload','visibility' => 'public',],]
并且因为我的项目在共享主机上,所以我在 public_html 中添加了一个包含以下内容的 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
ASSET_URL=/public
现在我想把upload文件夹移出public_html,我希望项目文件夹的结构如下:
. └── /home (Inaccessible) └── user ├── public_html └── upload
我通过如下更改公共磁盘的根地址没有得到答案,当我尝试显示照片时,我得到404 error
。
'root' => preg_replace("/^(.*\/).*$/","$1",$_SERVER['DOCUMENT_ROOT']).'/upload'
// OR
'root' => base_path('../upload')
//OR
'root' => dirname(__DIR__,2) . '/upload',
这可能吗?
更新
指向我的文件的链接类似于 http://example.com/upload/1611343402_Colors.png
解决方法
如果你使用 laravel,上传文件夹应该在 /root/storage 中。
查看存储门面文档 https://laravel.com/docs/8.x/filesystem
它是这样工作的。命令 Storage::disk('local')->put('file.txt','Contents');
会将文件存储在配置文件 /root/config/filesystems.php
中定义的“本地”磁盘上。我猜这就是你试图改变根参数的地方。您可以访问控制器文件、作业等中存储的任何文件。
如果您想将存储用于需要由网络服务器交付的公共资产,您需要执行以下操作:
使用 shell 命令 /root/public/storage
/root/storage/app/public
和 php artisan storage:link
之间创建一个 symlink
这样您就可以像这样使用存储助手 echo asset('storage/file.txt');
交付文件 /root/storage/app/public/file.txt
。
我不知道是否可以允许在共享服务器上直接访问 public_html 之上,即使您真的想这样做。
这是一种解决方法:创建一个加载图像的脚本,然后您可以安全地操作它,同时从任何目录加载图像。
此处概述了执行此操作的一般方法: Loading an image through PHP
来源:joschua011
$img = 'path/to/image.jpg';
header('Content-Type: image/jpeg');
readfile($img);
除此之外,只要您保护文件夹,在公用文件夹中放置图像就没有固有的问题。
,告诉 laravel 把你的文件放在那里很容易。您可以轻松地将磁盘的根目录设置为绝对路径:
'root' => '/home/user/upload'
问题是,apache2 配置为仅处理 public_html
文件夹中的文件。
我会在您的 public_html/public/upload
文件夹和实际的 upload
文件夹之间创建一个符号链接。
ln -s /home/user/upload /home/user/public_html/public/upload
接下来,确保 apache www-data 用户文件夹对文件夹 /home/user/upload
具有适当的权限
现在您可以像以前一样将文件链接到公众,同时将它们存储在您的自定义文件夹中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。