如何在cPanel共享主机上上传Laravel项目?

17

我正在使用cPanel为我的网站上传一个简单的订阅页面。我将文件上传到public_html,从public文件夹中移动文件并修改index.php以便它指向应用程序。我使用的PHP版本是7.3,但由于那是最新的版本,我不得不在主机上选择7.2版本。

当我加载我的网站时,出现以下错误:“此页面无法处理请求。 HTTP ERROR 500”

当我从index.php文件中删除所有内容并添加一个简单的echo语句后,页面就可以加载了。

我真的需要帮助,以下是错误日志:

堆栈跟踪:

#0 /home3/bazzaar/public_html/vendor/symfony/http-foundation/Response.php(198): Symfony\Component\HttpFoundation\Response->setStatusCode(500)
#1 /home3/bazzaar/public_html/vendor/symfony/http-foundation/Response.php(214): Symfony\Component\HttpFoundation\Response->__construct('<!doctype html>...', 500, Array)
#2 /home3/bazzaar/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(328): Symfony\Component\HttpFoundation\Response::create('<!doctype html>...', 500, Array)
#3 /home3/bazzaar/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(305): Illuminate\Foundation\Exceptions\Handler->convertExceptionToResponse(Object(Symfony\Component\Er in /home3/bazzaar/public_html/vendor/symfony/http-foundation/Response.php on line 450

我的.htacess文件

suPHP_ConfigPath /opt/php72/lib

选项 -MultiViews -Indexes

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

使用PHP72作为默认版本

12个回答

27

你不需要对Laravel的结构进行更改,只需复制以下htaccess代码并将其粘贴到您的Laravel项目根目录下的.htaccess文件中。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^$ public/index.php [L]
    RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
</IfModule>


17
假设cPanel没有其他网站,并且您的Laravel项目应该是默认项目。
  1. 压缩整个Laravel项目并将数据库导出为SQL文件
  2. 登录cPanel并进入文件管理器
  3. 确保您在根目录下,然后单击“上传”
  4. 选择您的zip文件并等待上传完成
  5. 解压上传的文件
  6. 将public文件夹中的内容移动到public_html文件夹中
  7. 返回Cpanel并转到数据库
  8. 创建一个数据库并添加(如果不存在则创建)一个DB用户
  9. 单击您的新数据库,然后单击“导入”
  10. 选择您导出的SQL文件
  11. 尝试使用域名URL访问您的Laravel网站
此网站可能提供更多详细信息:https://dev.to/asapabedi/deploying-laravel-5-applications-on-shared-hosting-without-the-use-of-ssh--16a6

11

如果您正在使用Apache服务器,您可以执行以下简单步骤

第一步:只需将所有源代码上传到服务器(确保数据库和.env设置完好)。 i)制作zip并解压缩 ii)使用git部署代码或从存储库中克隆并安装所有依赖项

第二步:在项目根目录下创建一个名为.htaccess的文件,并将下面的代码复制并粘贴到该文件中。

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php

我从这个视频中得到了这个答案,请向他表示感谢 https://www.youtube.com/watch?v=6Qbd9HTh7AE(谢谢你)


2
它对我有效,而无需将/public复制到应用程序的根目录。但是,它无法提供公共资产(图像)。 - Mahmood Hussain
@MahmoodHussain 是的,一旦找到资产的正确解决方案,我会编辑答案。 - Sachin Sarola
1
谢谢!这个帮我省了很多麻烦! - UrbanwarfareStudios
@MahmoodHussain,你可以在 .env 文件中设置资产 URL,这样你就能轻松访问这些资产了... - Sachin Sarola

11

我找到了一种有效的、无痛苦的 Laravel 8、9 和 10 版本系统。你可以跟着做,希望这能帮到你:

  1. public 文件夹中,你会找到 4 个文件:.htaccessfavicon.icoindex.phprobots.txt
  2. 将这些文件全部移动到应用程序的根目录外,也就是说,放到 public 文件夹之外。
  3. 使用编辑器打开 index.php 文件并更改其中的 2 行代码。
require __DIR__.'/../vendor/autoload.php';

改为:

require __DIR__.'/vendor/autoload.php';

以及:

$app = require_once __DIR__.'/../bootstrap/app.php';

改为:

$app = require_once __DIR__.'/bootstrap/app.php';
  1. 如果您在应用程序中使用了公共文件夹中的图像,您会发现在整个应用程序中,这些图像都无法显示。
  2. 现在,请前往.env文件并添加以下行:
     ASSET_URL=public
  3. 所有任务都已���成!

现在,只需将您的应用程序上传到共享服务器即可正常工作。


1
这个方法适用于 Laravel 10,我在本地开发环境中通过 php artisan serve(在 windows 上使用 xamp)进行部署。为了模拟公共部署,我按照 @arefindev 的步骤将所有 Laravel 文件放到我的 xamp/htdocs 文件夹下。它奏效了! - Marka A
1
也在 Laravel 10 上工作过。 - Josh L. Minga

5

截至2020年5月,Laravel 7.0

以下是我的操作步骤:

  1. 将cpanel中的php版本更新为laravel版本要求的版本,例如laravel 7.0需要https://laravel.com/docs/7.x/installation中所述的版本。

  2. 检查是否安装了所有必需的扩展程序。

  3. 如果出现与.htaccess相关的问题,请按照以下步骤测试…
    创建一个简单的index.html
    添加一行像这样的文本:

    Hello World

    然后将public_html中的所有文件(包括.htaccess)压缩并上传index.html
    刷新目标url(如domain.com)
    当它能正常工作时,你就可以进行下一步操作。
    (如果不能正常工作,请尝试调试/找出原因。)

  4. 上传数据库(假设已经导出),具体步骤如下:
    进入MySQL Databases
    创建一个与要添加的数据库名称完全相同的数据库
    然后创建一个MySQL用户,并将他赋予该数据库的所有权限
    在cpanel中进入phpmyadmin,导入导出的sql文件

  5. 压缩你的laravel项目并将其上传到主目录下

  6. 在cpanel中解压缩并…
    请注意:
    将所有文件夹放在主目录下
    选择public中的内容,包括.htaccess到public_html下

文件和文件夹结构应与您计算机上的Laravel 项目相同(除了public现在是public_html)

警告:不要修改index.php或server.php文件

  1. 在cpanel中显示隐藏文件,并最后通过编辑.env文件来…
    仅编辑数据库用户名和密码(我期望DB名称相同)
    此外,您需要将APP_DEBUG保留为true进行测试(必须测试)
    当一切都正常时,请将其更改为false。

  2. 如果没有数据库,那还等什么?立即刷新。
    尽管即使有数据库,也应该现在刷新。


5
请按照以下步骤操作:
  1. 检查根目录或子域名下的 .htaccess 文件。
  2. 如果将 public 目录中的文件移动到根目录 => 更改 index.php 中的内容 /../ 为 /

例如:

require DIR.'/../vendor/autoload.php';

更改为

require DIR.'/vendor/autoload.php';

以及

$app = require_once DIR.'/../bootstrap/app.php';

更改为

$app = require_once DIR.'/bootstrap/app.php';

  1. 检查 PHP 版本(在 Laravel 6+ 上,我使用了 PHP7.4 并解决了问题)
  2. 检查 .env 文件

3
  1. 在您的主机上创建一个名为public_html/myapp的新目录。

  2. 在 Laravel 项目中,您有一个public目录。将该 public 目录中的内容复制到您在主机上创建的 public_html/myapp 目录中。

  3. 在与public_html文件夹同一级别(不是其中!), 在主机上创建一个名为myapp-laravel的新目录。

  4. 从您的 Laravel 项目中复制除了public 文件夹之外的每个文件夹和文件(例如 app文件夹、.env文件等)到您在主机上创建的myapp-laravel文件夹中。

  5. 像这样编辑 public_html/myapp/index.php 文件:

  • Change require
    __ DIR__.'/../vendor/autoload.php';
    to require
    __ DIR__.'/../../myapp-laravel/vendor/autoload.php';
  • Change
    require_once __ DIR__.'/../bootstrap/app.php';
    to
    require_once __ DIR__.'/../../myapp-laravel/bootstrap/app.php';

在这里查找文章


2
  1. 在托管平台上创建一个子域名并将其映射到一个文件夹,例如:“abc”
  2. 在文件夹 “abc” 中上传 Laravel 项目 zip 文件(带有 vendor 文件夹),然后解压缩它
  3. 将子域名映射到 Laravel 的 public 文件夹,即 “abc/public”
  4. 创建数据库和用户,并将该用户分配到具有所有权限的数据库中
  5. 将 DB dump 导入到上面创建的数据库中
  6. 在 Laravel 的 .env 文件中添加 DB 用户名/密码。

注意: 如果由于缓存而遇到任何问题,请在目录bootstrap/cache中删除文件config.php。


1
大多数cpanel现在都包含了一个laravel项目的选项卡。只需点击laravel选项卡并安装,按照给定的简单步骤设置您的文件夹即可。 选项卡截图 然后创建一个index.php文件,将其重定向到具有laravel项目的公共文件夹。使用以下代码:
  <?php
    header("refresh: 1; https://wesley.io.ke/lara/public/");
    ?>

所有的操作已完成,现在可以使用创建项目时输入的域名来访问您的项目。


0
首先,在您的cpanel中上传项目文件夹。在我的情况下,它被命名为project
然后,上传公共文件夹到public_html,并根据您上传项目的文件夹更改index.php文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接