【问题标题】:How to install Laravel 4 to a web host subfolder without publicly exposing /app/ folder?如何在不公开 /app/ 文件夹的情况下将 Laravel 4 安装到 Web 主机子文件夹?
【发布时间】:2013-05-16 23:45:42
【问题描述】:

我想知道你们中是否有人知道将 Laravel 4 安装在网络主机的 SUBDIRECTORY / 子文件夹中,同时不将 /app/ 文件夹和其他敏感文件暴露给主机的可公开访问部分的方法。

我的想法是,我可以访问 http://mydomain.com/mylaravel/ 以使用 Laravel,但同时我想避免任何人做类似去 http://mydomain.com/app/http://mydomain.com/mylaravel/app/ 之类的事情,并且基本上能够查看我的配置文件和其他代码。

【问题讨论】:

    标签: laravel installation laravel-4 subdirectory


    【解决方案1】:

    所以我想出了如何做到这一点。我会举例说明。

    假设您是一个域http://domain.com。以下是您可能正在使用的结构示例:

    domain.com/    (the root of your web hosting)
    |-- yourlaravel4_base/
    |-- [some other folders...]
    |-- public_html/    (where your html files and such go)
    |   |-- [some other folders...]
    |   |-- yourlaravel4/
    

    /public_html/ 是您的网络托管文件的可公开访问部分的根。 您想在/public_html/(在本例中为/public_html/yourlaravel4/)中创建一个子文件夹。在此子文件夹中,您将存储 Laravel 4 public/ 文件夹的所有内容

    现在,剩下的文件。您必须转到您的虚拟主机文件的根目录,也就是说,您想处于domain.com/ 级别,因此能够看到public_html/ 和其他一些文件夹。然后,我们需要在这里创建一个文件夹,用于存放 Laravel 4 的基础文件。在这种情况下,它是domain.com/yourlaravel4_base/。在yourlaravel4_base/ 中,我们需要存储存在于基本 Laravel 4 目录中的每个文件和文件夹。那将是app/bootstrap/vendor/server.php 等。除了/public/ 文件夹之外的所有内容,您已经将其内容存储在public_html/yourlaravel4/ 中。

    最后,我们需要编辑 2 个文件:Laravel 的 /bootstrap/paths.php/public/index.php


    paths.php 文件中,替换:

    'app' => __DIR__.'/../app',
    

    与:

    'app' => __DIR__.'/../../yourlaravel4_base/app',
    

    paths.php 文件中,替换:

    'public' => __DIR__.'/../public',
    

    与:

    'public' => __DIR__,
    

    paths.php 文件中,替换:

    'base' => __DIR__.'/..',
    

    与:

    'base' => __DIR__.'/../../yourlaravel4_base',
    

    paths.php,替换:

    'storage' => __DIR__.'/../app/storage',
    

    与:

    'storage' => __DIR__.'/../../yourlaravel4_base/app/storage',
    

    index.php,替换:

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

    与:

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

    index.php,替换:

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

    与:

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

    上传更改。现在,您应该能够将 Laravel 4 安装在您网站的子文件夹中,而不会实际暴露 app/ 文件夹和其他敏感文件。 :)

    【讨论】:

    • 只有我需要编辑才能启动和运行的文件是 config/app.php 文件,将 url 指向包含公用文件夹内容和 /public/index.php 的文件夹的位置建议的文件路径。棘手的部分是知道要添加多少“../../”。引号后也没有斜线(是)DIR.'../ 建议(否)__DIR__.'/../
    • 真的很有帮助!
    • 回答得很好,谢谢。然而,就我而言,这是一个不完整的解决方案,没有@TechyTimo 的贡献顺便说一句,为什么这个答案(最高票数和接受的答案)在答案列表中显示最低?
    • 不幸的是,如果您的主机做了一些愚蠢的重写基本内容并且即使根目录存在,您也无法从 webapp 访问它,这并不总是有效。 This 很好地总结了不同的选项,包括这个。
    • 只是好奇,它适用于 Laravel 5 吗?我正在计划 L5
    【解决方案2】:

    emmanuel 的答案对我不起作用,但我做了一些更改以使其正常工作。虽然我使用我的网络根作为项目的来源。 它在那里; 我将 htdocs 文件夹作为根文件夹,但您可能还有其他文件夹,例如 public_html 、 www 等。您可以轻松地将我的 htdocs 替换为您拥有的。

    很好。

    我的目录

    根/ 文档 .htaccess .override

    首先,我使用 composer 解决了我在 windows 上本地主机上的所有 laravel 依赖项。之后我确实将整个包打包到 laravel4.zip 中。在我的 htdocs 中,我创建了一个 laravel 文件夹,并在其中上传并解压缩了 zip 文件。

    htdocs/
            拉拉维尔/
                     应用程序
                     引导程序
                     民众
                     供应商
                     ...

    所以在我解压缩文件后,我将公用文件夹中的所有内容都移动到 htdocs 文件夹中

    htdocs/
            拉拉维尔
            包
            .htaccess
            favicon.ico
            索引.php
            robots.txt

    现在我们必须重写 htdocs/index.php 和 htdocs/laravel/bootstrap/paths.php 中的一些路径

    但是让我们打开 htdocs/laravel/bootstrap/paths.php 。你会看到

    'app' => __DIR__.'/../app',

    这是什么意思。这意味着我们站在 htdocs/laravel/bootstrap/ path 。在那里我们需要退出这个文件夹到 laravel 文件夹然后去 app 文件夹。好的 。这是用于路由的 laravel 的结构。如果你做对了,你可以让你的 laravel 运行。

    找到

    'public' => __DIR__.'/../public',

    并将其更改为

    'public' => __DIR__.'/../../htdocs',

    (简单哈)其中一个(../)我们可以上一个文件夹。所以现在我们在 laravel 文件夹。但我们需要在 htdocs 中。所以我们必须写另一个 (../) 才能到达那里。

    打开 htdocs/index.php 和 找到

    需要__DIR__.'/../bootstrap/autoload.php';

    改成

    需要'laravel/bootstrap/autoload.php'; 

    require 是一个内置的 php 函数,因此我们将其视为一个简单的 php 。我们真的不需要 laravel 风格来获取 autoload.php 文件。所以只需将其删除并选择经典风格

    找到

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

    改成

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

    【讨论】:

    • 很高兴看到 Laravel 为你工作。路径的事情很棘手,我什至曾经有一个项目,由于某种奇怪的原因,我需要使用文件的完整路径。 ://
    【解决方案3】:

    您可以使用别名:no hankey-pankey 与您系统上的广泛目录。

    在您的 httpd.conf 或管理面板中指定:

    /mylaravel/ /path/to/laravel/public
    

    此外,在你的 Laravel 的 app.php 中指定 URL

    第 29 行

    'url' => 'http://yourdomain.com/mylaravel/',
    

    最终在 /public/.htaccess 中设置 RewriteBase

    RewriteBase /mylaravel/
    

    像魅力一样工作,让您的目录结构保持简洁和重点!

    【讨论】:

    • 这似乎是真正的答案。
    • 如果你访问一个不存在的页面,你会得到什么? laravel '哎呀,看起来出了点问题。消息、内部服务器错误或未找到页面?因为它应该返回 laravel 消息。
    • 在您的 httpd.conf 或 admin-panel /mylaravel/ /path/to/laravel/public 中指定 - 你能告诉我它是如何完成的吗?
    【解决方案4】:

    人,人!无需将事情过度复杂化!

    (对于其他公用文件夹,例如 htdocswww,只需将下面的 public_html 替换为您的。)

    1. 把你所有的 Laravel 东西放在顶级文件夹中(这样app 文件夹就在public_html 文件夹旁边)
    2. 将所有文件从public 移动到public_html(请务必同时移动隐藏文件,例如.htaccess!)
    3. 删除现在为空的public 文件夹
    4. bootstrap/path.php

      'public' => __DIR__.'/../public',

      'public' => __DIR__.'/../public_html',

    5. 完成。

    【讨论】:

    • 这就是我所做的......防弹,对吧?如果您不希望 app/ 在您的公共目录中可见,不要将它放在您的公共目录中!
    • 对于 GoDaddy 共享主机:medium.com/@kunalnagar/…
    • 这并不能回答问题,而问题是如何将其放入子文件夹中。
    【解决方案5】:

    请务必检查您的权限。虽然不推荐,但我通过以下方式部署。

    我使用 SSH 并做了类似的事情:

    rm -rf public_html/ // WARNING: READ NOTE AT THE BOTTOM BEFORE RUNNING
    
    ln -s project_folder/public/ public_html  // where the format is ln -s target name
    

    之后,我会收到类似“哎呀,好像出了点问题”的消息(或错误,取决于您的调试设置)。要解决此问题,我只需将文件夹的权限更改为 755。 参考:http://kb.webhostface.com/laravel/fix-permission-denied-error-laravel

    总体而言,我将返回并尝试更改权限的原始方式,因为我发现这条路线不太安全,并且更依赖于我的托管客户服务。

    *****注意***** 此命令显然会删除您的 public_html(有时也称为 public 或 www)文件夹。您需要备份其中的所有文件,因为您正在删除它。此外,您需要准备好通过客户服务来恢复它。许多托管服务不允许您简单地自行重新创建文件夹。

    【讨论】:

    • rm -rf public_html/ 真的太可怕了!
    【解决方案6】:

    如果您在面板中使用插件域或子域向导,向导应该要求您提供文档根目录。例如我想添加 droidman.com , 向导应该建议我制作 droidman.com 文件夹。在这一步告诉向导制作 droidman.com/public 文件夹。然后将您的应用程序放在 droidman.com 文件夹中。您的主机将查看公用文件夹;)。问题解决了

    【讨论】:

      【解决方案7】:

      如果您尝试将 Laravel 5.1 运行到共享主机空间,并且上述所有答案似乎与实际的 Laravel 文件/文件夹有点不同,或者您正在寻找如何将 laravel 5/5.1 放入子共享主机空间上的目录,以便您可以像这样访问它:

      http://mywebsite.com/mylaravel/
      

      所以这个答案是给你的,首先确保你满足

      Laravel 5.1 要求:

      - PHP 5.5
      - PHP extension Mcrypt
      - PHP extension Mbstring
      - PHP extension OpenSSL
      

      这里有两个简单的教程:

      Link 1

      Link 2

      【讨论】:

        【解决方案8】:

        如果您使用的是 apache 服务器,最简单的方法是将您的 Laravel 应用程序存储在 www 根目录之外(或在 www 根目录中的受保护文件夹中),然后符号链接所需的子文件夹以将其指向公共laravel 中的文件夹

        例如,我将我的 laravel 安装放在:

        /usr/local/share/myLaravel
        

        然后,在您的公共 www 文件夹中,创建一个符号链接,如下所示:

        ln -s /usr/local/share/myLaravel/public mylaravel
        

        您需要对您的安装进行一些调整,例如将您的 Rewrite Base 放到 /mylaravel/ 并确保您的配置文件允许在基本位置进行覆盖,但这比修改所有内容要简单。

        【讨论】:

          【解决方案9】:

          如果你想简单地在共享主机上设置 Laravel 项目并且你有 cPanel 访问权限,那么你可以按照我遵循的步骤进行操作,并且效果很好。

          第 1 步:在本地计算机上制作整个 Laravel 应用程序的 zip 或 tar 文件。

          第 2 步:转到 Cpanel。将 zip/tar 文件上传到 public_html 目录,然后解压。 (您也可以为您的 laravel 应用程序创建单独的文件夹。由于我想上传多个 Laravel 应用程序,因此我为每个应用程序创建了单独的目录,如下图所示。)

          第 3 步:现在转到“插件域”并更改您指定域的文档根目录。将域指向公用文件夹。

          现在检查您的域,它将重定向到 public/index.php 文件。无需更改任何路径。

          【讨论】:

          • 这个对我有用。检查当前 PHP 版本是否为 5.6 很重要,因为其他版本会阻止 laravel 应用程序完全正常工作。
          猜你喜欢
          • 1970-01-01
          • 2014-10-13
          • 1970-01-01
          • 2017-07-17
          • 2015-08-06
          • 2015-02-08
          • 1970-01-01
          • 2017-11-04
          • 2010-11-21
          相关资源
          最近更新 更多