【问题标题】:How to deploy laravel 4.2 on shared hosting?如何在共享主机上部署 laravel 4.2?
【发布时间】:2014-11-01 16:36:36
【问题描述】:

我使用 laravel 4.2.8 开发了一个应用程序,现在我无法部署它。我遵循了这个答案https://stackoverflow.com/a/16683938/3153380,但它不起作用。我得到一个白屏,并且标题返回 500 Internal Server Error 状态。

我读到 laravel 4.2 在共享主机上设置有点棘手,这是真的吗?我似乎可以找到一个可行的解决方案,所以那些之前部署过 4.2 的人请帮忙。我的文件夹结构如下所示

根/ laravel_base/ 应用程序/ ... public_html/ 站点根目录/ 资产/ 包/ 上传/ 索引.php ... 有什么指点吗?

【问题讨论】:

  • “500 内部服务器错误”状态码(或空白页)表示您的脚本正在抛出错误,但您尚未配置 PHP 以显示错误消息。这是您在更进一步之前需要解决的问题;如果没有错误消息的帮助,就不可能正确编码。这是brief explanation
  • @ÁlvaroG.Vicario 感谢您的指点。我收到此错误警告:require(): open_basedir 限制生效。文件(/usr/www/users/hosting_base/laravel_base/../../siteroot/bootstrap/autoload.php)不在允许的路径中:
  • 如果路径是这样的,那么您的站点根目录在您的托管基础​​之外。

标签: php laravel-4 shared-hosting


【解决方案1】:

试试.htaccess

在您的public_html 中,添加.htaccess 以转发请求

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^yoursite.com/public
    RewriteRule ^(.*)$ yoursite.com/public/$1 [L]
</IfModule>

public_html
├── yoursite.com    <-------- laravel project
├── .htaccess       <-------- this file

【讨论】:

    【解决方案2】:

    我只是在共享主机的 / 文件夹中添加了一个新文件夹

    www.domain.com

    我在其中添加了一个名为

    的子文件夹

    public/

    让路径看起来像这样

    /www.domain.com/public/

    我从 CPANEL 将域名根文件夹链接到

    www.domain.com/public/

    然后我只是上传 laravel 应用程序

    /www.domain.com

    它适用于 laravel 4.2 和 5。 并且没有安全漏洞,因为根域文件夹在 laravel 应用的公共文件夹中,无需更新 .htaccess 文件。

    它只是工作。

    【讨论】:

    • 我发现这个答案不清楚。公共文件夹的内容应该是什么?
    • laravel 的公用文件夹
    【解决方案3】:

    让 Laravel 4/5 在 OpenShift Online 上运行非常容易。对于其他遇到托管问题的人,请查看:https://hub.openshift.com/quickstarts/115-laravel-5-0

    【讨论】:

    【解决方案4】:

    首先确保您的共享主机运行php >= v5.4。第二次尝试按照以下步骤操作:

    1. public_html/www/ 之外创建一个文件夹。例如:project/
    2. 将你的 laravel 应用中的所有文件夹和文件(public 文件夹除外)复制到 project/ 文件夹中
    3. public/文件夹的内容复制到您的public_html/www/ (.htaccess也必须在那里)
    4. 在 public/ 中找到 index.php 文件并更改以下路径:

      一个。 autoload.php的路径

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

      进入

      require __DIR__.'/../project/bootstrap/autoload.php';
      

      b. start.php的路径

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

      进入

      $app = require_once __DIR__.'/../project/bootstrap/start.php';`
      

    毕竟它应该可以工作。

    【讨论】:

    • 我在主机上创建了 de 'public_html' 之外的文件夹,并从我的 laravel projetc 里面复制了 'public' 文件夹'public_html'。现在访问我的应用程序是否还需要在 URL 中指定公用文件夹?我的意思是:lenguajemx.com/public
    • 这可能是两件事。 1) 你有 public_html/public 吗?如果是这样,请仅将其设为 public_html/{contents here} 2)您是否也复制了 .htaccess?
    • 是的,这两个方面都是正确的,我有 public_html/public 并且我已经在 public_html/public 文件夹中复制了 .htaccess。所以我会按照你说的去做。谢谢,我会再试一次。
    【解决方案5】:

    我做了类似于@Helder Lucas 的事情——我还必须编辑 bootstrap/paths.php 文件:

    # change: 'public' => __DIR__.'/../public',
    'public' => __DIR__.'/../../public_html',
    

    我创建了一个脚本来为共享托管环境设置 laravel 项目。要点如下:https://gist.github.com/meganlkm/74dba6c4350ed58bf7bb

    【讨论】:

    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 2015-06-17
    • 2018-06-07
    • 2018-04-04
    • 2018-03-10
    • 1970-01-01
    • 2019-09-30
    • 2021-06-28
    相关资源
    最近更新 更多