当使用 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行不行,你可以试试这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 的响应
如果您没有服务器的管理权限,您可以查看本教程:How to deploy Laravel 8 project on Cpanel shared hosting