图像被存储在外部公共文件夹和在视图中,从公共文件夹内部调用。在本地主机上一切正常。在cpanel上传项目后,我将index.php和htaccess放在公共文件夹外。我如何存储和调用他们从同一文件夹?谢谢你。
使用Laravel时,所有HTTP请求必须命中public
目录。但是由于你使用的是cPanel,所有的请求默认情况下直接命中public_html
。
你试图通过将index.php
和.htaccess
文件从public_html/public
移动到public_html
来克服它,你破坏了它的结构。
如果你在服务器上有管理权限(例如:root),你可以通过编辑你的Web服务器(我假设在你的情况下是Apache)来解决这个问题,将你的域请求直接指向你的Laraval应用程序的public
目录。
通常cPanel中的每个网站都有单独的配置文件。它们的路径是这样的:
/var/cpanel/userdata/CPANELUSER/WEBSITEDOMAIN.COM
和/var/cpanel/userdata/CPANELUSER/WEBSITEDOMAIN.COM_SSL
在这个文件中有一个documentroot
字段,它默认指向public_html
目录:
documentroot: /home/CPANELUSER/public_html
您需要更改它并将其指向应用程序的public
目录;
documentroot: /home/CPANELUSER/laravel/project/path/public
更新这两个文件后,需要重新构建Apache配置并重新启动它;
/usr/local/cpanel/scripts/rebuildhttpdconf
/usr/local/cpanel/scripts/restartsrv_httpd
如果这两行不行,你可以试试这2;
/scripts/rebuildhttpdconf
/scripts/restartsrv_apache
如果一切顺利,所有的HTTP请求都会像预期的那样到达你的Laravel应用程序的public
目录。
之后;如果你上传的文件存储在public
中,Laravel会把它们放到storage/app/public
中,你需要一个符号链接到public
目录。
当你运行
时,Laravel会创建它php artisan storage:link
现在您的应用程序的所有请求作为your.domain/storage/bla.jpg
将从storage/app/public/bla.jpg
给出响应
如果你没有服务器的管理权限,你可以看看这个教程:如何在Cpanel共享主机上部署Laravel 8项目