如何在没有公开暴露/ app /文件夹的情况下将Laravel 4安装到Web主机子文件夹?

时间:2013-05-22 03:33:49

标签: laravel install laravel-4 subdirectory

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

我的想法是,我可以访问http://mydomain.com/mylaravel/以便能够使用Laravel,但同时我想避免任何人做像http://mydomain.com/app/或{{3并且基本上能够看到我的配置文件和其他代码。

9 个答案:

答案 0 :(得分: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/文件夹的所有内容

现在,对于其余的文件。您必须转到Web托管文件的根目录,也就是说,您希望处于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/文件夹和其他敏感文件。 :)

答案 1 :(得分:28)

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

在httpd.conf或admin-panel中指定:

/mylaravel/ /path/to/laravel/public

此外,请在Laravel的app.php中指定网址

第29行

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

最终在/public/.htaccess

中设置RewriteBase
RewriteBase /mylaravel/

像魅力一样工作,保持您的目录结构清洁,重点突出!

答案 2 :(得分: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. 完成。

答案 3 :(得分:3)

emmanuel回答对我不起作用,但我做了一些改动以使其发挥作用。虽然我使用我的web根作为项目的来源。 在那里; 我有htdocs文件夹作为根文件夹,但你可能有其他,如public_html,www等。你可以轻松地用你的htdoc替换我的htdoc。

很好。

我的dircetory

root/ 
      htdocs
      .htaccess
      .override

首先,我使用composer解决了我在localhost上的所有laravel依赖关系。之后,我把整个包裹装进了laravel4.zip。在我的htdocs中,我创建了一个laravel文件夹,我确实上传了zip文件并将其解压缩。

htdocs/
        laravel/
                 app
                 bootstrap
                 public 
                 vendors
                 ...

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

htdocs/
        laravel
        packages
        .htaccess
        favicon.ico
        index.php
        robots.txt

现在我们必须在htdocs / index.php和htdocs / laravel / bootstrap / paths.php重写一些pathes

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

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

找到

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

并将其更改为

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

(简单ha)与其中一个(../)我们可以上一个文件夹。所以现在我们在laravel文件夹。但我们需要在htdocs。所以我们必须写另一个(../)来实现目标。

打开htdocs / index.php和 找到

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

将其更改为

require 'laravel/bootstrap/autoload.php'; 

require是一个内置的php函数,因此我们将它视为一个简单的php。我们不需要laravel样式来获取autoload.php文件。所以简单地删除它并去寻找经典风格

找到

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

将其更改为

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

答案 4 :(得分: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

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

Link 1

Link 2

答案 5 :(得分:1)

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

答案 6 :(得分:1)

如果您只想在共享主机上设置Laravel Project并且您拥有cPanel访问权限,那么您可以执行以下步骤,我已经遵循并且运行良好。

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

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

enter image description here

第3步:现在转到Addon Domain'并更改指定域的文档根目录。将域指向公用文件夹。

enter image description here

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

答案 7 :(得分:0)

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

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

/usr/local/share/myLaravel

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

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

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

答案 8 :(得分:-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)文件夹。您需要备份其中的所有文件,因为您要删除它。此外,您需要准备好通过客户服务来恢复它。许多托管服务不允许您自己重新创建文件夹。