61

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

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

4

9 回答 9

64

所以我想出了如何做到这一点。我会用一个例子来解释。

假设您是一个域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/文件夹和其他敏感文件。:)

于 2013-05-22T05:15:19.977 回答
28

您可以使用别名: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/

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

于 2014-03-23T15:32:26.123 回答
7

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

(对于其他公用文件夹,例如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. 完毕。
于 2014-12-08T02:14:46.817 回答
3

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

美好的 。

我的目录

根/
      文档
      .htaccess
      .override

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

htdocs/
        拉拉维尔/
                 应用程序
                 引导程序
                 上市
                 供应商
                 ...

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

htdocs/
        拉拉维尔
        包
        .htaccess
        favicon.ico
        索引.php
        机器人.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';
于 2014-01-22T14:36:16.467 回答
2

如果您尝试将 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

这里有一个简单的两个教程给你:

链接 1

链接 2

于 2015-06-25T09:45:56.483 回答
1

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

于 2015-03-10T20:16:46.213 回答
1

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

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

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

在此处输入图像描述

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

在此处输入图像描述

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

于 2016-02-08T13:26:59.990 回答
0

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

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

/usr/local/share/myLaravel

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

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

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

于 2015-06-30T15:11:19.237 回答
-3

确保检查您的权限。尽管我不推荐它,但我通过以下方式进行了部署。

我使用 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)文件夹。您需要备份其中的所有文件,因为您正在删除它。此外,您需要准备好通过客户服务来恢复它。许多托管服务不允许您简单地自行重新创建文件夹。

于 2015-01-12T00:32:24.077 回答