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

Posted

技术标签:

【中文标题】如何在 cPanel 共享主机上上传 laravel 项目?【英文标题】:How do I upload a laravel project on cPanel shared hosting? 【发布时间】:2020-08-02 05:52:09 【问题描述】:

我正在使用 cPanel 为我的网站上传一个简单的订阅页面。我将文件上传到 public_html,从 public 文件夹中移动文件并修改 index.php 使其指向应用程序。我用于编写此应用程序的 php 版本是 7.3,但我必须在主机中选择 7.2 版本,因为那是可用的最新版本。

当我加载我的网站时,我收到此错误“此页面无法正常工作 bazzaar.net 目前无法处理此请求。 HTTP 错误 500"

当我从 index.php 文件中删除所有内容并添加一个简单的回显时,页面会加载。

我真的需要帮助。错误日志如下:

堆栈跟踪:

#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

【问题讨论】:

【参考方案1】:

假设cpanel没有其他网站并且你的laravel项目应该是默认项目。

    压缩整个 Laravel 项目并将数据库导出到 sql 登录 cPanel 并导航到文件管理器 确保您位于根文件夹中,然后单击“上传” 选择您的 zip 文件并等待上传完成 解压上传的文件 将公开内容移至public_html文件夹 返回 Cpanel 并导航到数据库 创建数据库并添加(如果不存在则创建)数据库用户 点击您的新数据库,然后点击“导入” 选择您导出的 SQL 文件 尝试使用域 url 访问你的 laravel 网站

此网站可能会提供更多详细信息https://dev.to/asapabedi/deploying-laravel-5-applications-on-shared-hosting-without-the-use-of-ssh--16a6

【讨论】:

我没有数据库连接。我之前在确切的网站上做过所有这些,但它不起作用。 你是说网站不使用数据库? “不起作用”到底是什么意思?当您尝试访问该网站时遇到什么错误? 这是网站 URL bazzaar.net,我得到的错误是 HTTP ERROR 500。该项目基本上允许某人添加他们的电子邮件,然后将其添加到文本文件中,所以我没有为此使用数据库。 除了来自基本 HTML 网页之外,没有要加载的图像或其他文件 这个错误通常是由两件事造成的——要么你的 PHP 版本低于要求,要么你的 htaccess 文件包含错误【参考方案2】:

截至 2020 年 5 月,LARAVEL 7.0 这对我有用:

    将cpanel的php版本更新为laravel版本的要求说laravel 7.0需要https://laravel.com/docs/7.x/installation

    检查是否安装了所有必需的扩展

    如果您在使用 .htacess 时遇到问题,我建议您通过 .. 进行测试 创建一个简单的 index.html 只需添加一行像

    你好世界

    然后压缩 public_html 中的所有文件(包括 .htaccess)并上传 index.html 刷新目标 url 说 domain.com 当它起作用时,您就可以进行下一步了 (如果它不尝试调试/找出原因)

    通过...上传您的数据库(假设它已经导出) 转到 mysql 数据库 使用要添加的数据库的确切名称创建一个数据库 然后创建一个 MySQL 用户并授予他对数据库的所有权限 进入cpanel中的phpmyadmin,导入导出的sql文件

    压缩您的工作 laravel 项目并将其上传到主文件夹

    在 cpanel 提取和... 请注意: 将所有文件夹放在家中 选择公共的内容,包括 .htaccess 到 public_html

文件夹和文件结构应该和你的 LARAVEL 项目一样 你的电脑(除了 public 现在是 public_html)

警告:不要触摸您的 index.php 或 server.php

    使隐藏文件在您的 cpanel 中可见,然后最后通过...编辑 .env 文件 仅编辑数据库用户名和密码(我希望数据库名称相同) 您还想将 APP_DEBUG 保留为 true 以进行测试(您必须测试) 当一切顺利时,将其更改为 false

    如果你还没有数据库,什么已经在等待刷新 尽管即使使用数据库现在时间刷新

【讨论】:

【参考方案3】:

按照以下步骤操作:

    检查根或子域上的 .htaccess 文件。 如果将公共文件移动到根目录 => 将 index.php 内容 /../ 更改为 /

例如

需要DIR.'/../vendor/autoload.php';

需要DIR.'/vendor/autoload.php';

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

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

    检查 php 版本(在 laravel 6+ 上我使用 php7.4 并解决了问题) 检查 .env 文件

【讨论】:

【参考方案4】:

你不需要改变 Laravel 的结构。只需复制下面的 htaccess 代码并粘贴到 laravel 项目根目录下的 .htaccess 文件即可。

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

【讨论】:

这不起作用.. @KetanHarsoda 你在根目录中添加了.htaccess,而不是在公共文件夹中吗?【参考方案5】:

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

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

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

    除了 public 文件夹,从您的Laravel 项目放到你主机上的 myapp-laravel 文件夹中。

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

将要求
__ DIR__.'/../vendor/autoload.php';
更改为要求
__ DIR__.'/../../myapp-laravel/vendor/autoload.php';
require_once __ DIR__.'/../bootstrap/app.php';
更改为
require_once __ DIR__.'/../../myapp-laravel/bootstrap/app.php';

查找文章here。

【讨论】:

【参考方案6】:

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

第 1 步:只需将所有源代码上传到服务器(确保数据库和 .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(谢谢)

【讨论】:

它对我有用,无需将 /public 复制到应用程序的根目录。但是,它不提供公共资产(图片) @MahmoodHussain 是的,一旦获得资产的正确解决方案,我将编辑答案【参考方案7】:

问题似乎与 PHP 版本有关。 Laravel 6 需要 PHP >=7.2.5,而 Hostgator 只有 7.1 作为最新版本。所以我不得不联系客户支持并询问最新的 PHP 版本。

另外,laravel 需要的 mbStrings 也被关闭了。

【讨论】:

【参考方案8】:
    压缩并上传您的项目。 解压 将域的根文件夹配置为“public”,即 laravel 解压文件夹中的 public 文件夹。

【讨论】:

这在大多数托管服务提供商中是不可能的【参考方案9】:

首先,将项目上传到您的 cpanel 的文件夹中。在我的例子中,它被命名为project。 然后,上传public_html中的public文件夹,根据你上传项目的文件夹修改index.php文件。

【讨论】:

【参考方案10】:
    在主机上创建一个子域并将其映射到一个文件夹,例如:“abc” 在“abc”文件夹中上传 laravel 项目 zip(带有 vendor 文件夹)然后解压 将子域映射到 laravel 的公共文件夹,即“abc/public”。 创建数据库和用户并将该用户分配给具有所有权限的数据库 在上面创建的数据库中导入 DB 转储。 在 laravel .env 文件中添加数据库用户/密码。

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

【讨论】:

以上是关于如何在 cPanel 共享主机上上传 laravel 项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cpanel 中克隆 github 私有存储库(没有终端或 ssh 的共享主机)?

如何以编程方式在共享主机计划上创建插件域

共享主机上的 Django 应用程序依赖项(Cpanel)

Cpanel 共享主机中的 Laravel 5.5 错误 500

通过nodejs在共享cpanel主机上实现websocket服务器

Cpanel 共享主机上的 Laravel