我想知道是否有一种方法可以在网络主机的子目录/子文件夹中安装Laravel 4,同时不暴露/app/文件夹和其他敏感文件给主机的公开可访问部分。
我的想法是,我可以访问http://mydomain.example/mylaravel/
来使用Laravel,但同时我想避免任何人做类似于访问http://mydomain.example/app/
或http://mydomain.example/mylaravel/app/
的事情并且基本上能看到我的配置文件和其他代码。
我想知道是否有一种方法可以在网络主机的子目录/子文件夹中安装Laravel 4,同时不暴露/app/文件夹和其他敏感文件给主机的公开可访问部分。
我的想法是,我可以访问http://mydomain.example/mylaravel/
来使用Laravel,但同时我想避免任何人做类似于访问http://mydomain.example/app/
或http://mydomain.example/mylaravel/app/
的事情并且基本上能看到我的配置文件和其他代码。
我已经想出如何做到这一点。我将通过一个例子来解释。
假设您有一个域名:http://domain.example
。这是您可能正在使用的结构示例:
domain.example/ (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.example/
级别,因此能够看到 public_html/
和其他一些文件夹。然后,我们需要在这里创建一个文件夹,用于存储 Laravel 4 的基本文件。在这种情况下,它是 domain.example/yourlaravel4_base/
。在 yourlaravel4_base/
内,我们需要存储存在于基本 Laravel 4 目录中的每个文件和文件夹。这将包括 app/
, bootstrap/
, vendor/
, server.php
,等等。除了您已经存储在 public_html/yourlaravel4/
中的 /public/
文件夹及其内容之外的所有内容。
最后,我们需要编辑 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/
文件夹和其他敏感文件。 :)
您可以使用别名:在系统中广泛使用的目录中不需要进行任何操作。
在httpd.conf或管理面板中指定:
/mylaravel/ /path/to/laravel/public
此外,在 Laravel 的 app.php 文件中指定URL。
第29行。
'url' => 'http://yourdomain.example/mylaravel/',
最终在您的 /public/.htaccess 文件中设置 RewriteBase
RewriteBase /mylaravel/
功能强大,可以保持目录结构干净简洁!
大家,不要过于复杂化事情!
(对于其他公共文件夹,例如htdocs
或www
,只需将以下的public_html
替换为您自己的文件夹即可。)
app
文件夹与public_html
文件夹并排)。public
移动到public_html
(一定要移动隐藏文件,如.htaccess
!)。public
文件夹。在bootstrap/path.php
中更改
'public' => __DIR__.'/../public',
为
'public' => __DIR__.'/../public_html',
app/
在公共目录中可见,请不要将其放在公共目录中! - Adam MarshallEmmanuel的答案对我没有用,但我做了一些更改使它可以工作。虽然我使用我的网站根目录作为项目的来源。
这里有:
我有一个htdocs文件夹作为根文件夹,但你可能有其他的,比如public_html、www等等。你可以轻松地用你自己的文件夹代替我的htdocs。
好吧。
我的目录
root/ htdocs .htaccess .override
首先,我使用Composer在我的Windows本地主机上解决了所有Laravel依赖关系。之后,我将整个包打包成了laravel4.zip。在我的htdocs中,我创建了一个laravel文件夹,并在其中上传并解压缩zip文件。
htdocs/ laravel/ app bootstrap public vendors ...
所以,在我解压缩文件之后,我把public文件夹中的所有东西移动到htdocs文件夹中。
htdocs/ laravel packages .htaccess favicon.ico index.php robots.txt
现在,我们需要重写htdocs/index.php和htdocs/laravel/bootstrap/paths.php中的一些路径。
但让我们先打开htdocs/laravel/bootstrap/paths.php。你会看到
'app' => __DIR__.'/../app',
这意味着我们正在htdocs/laravel/bootstrap/路径下。因此,我们需要退出该文件夹到laravel文件夹,然后进入app文件夹。好吧。这是Laravel的路由结构。如果你理解了这个,你就可以使Laravel运行。
找到
'public' => __DIR__.'/../public',
并将其更改为
'public' => __DIR__.'/../../htdocs',
(简单吧)用一个(../),我们可以向上走一层文件夹。所以现在我们在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';
如果您想将Laravel 5.1运行在共享托管空间中,而所有上述答案似乎与实际的Laravel文件/文件夹有所不同,或者您正在寻找如何将您的Laravel 5/5.1放入共享托管空间的子目录中,以便您可以像这样访问它:
http://mywebsite.example/mylaravel/
首先确保您符合Laravel 5.1的要求:
以下是两篇易于理解的教程:
droidman.example
。向导应该建议我创建一个 droidman.example
文件夹。在这一步中,请告诉向导创建 droidman.example/public
文件夹。然后将您的应用程序放在 droidman.example
文件夹中。您的主机将查看 public 文件夹。/usr/local/share/myLaravel
然后,在您的公共www文件夹中创建符号链接,如下所示:
ln -s /usr/local/share/myLaravel/public mylaravel
你需要对安装进行一些调整,比如将 Rewrite Base 设置为 /mylaravel/,并确保你的配置文件允许在基础位置进行覆盖,但这比修改所有内容要简单。
请确保检查您的权限。虽然我不建议这样做,但我是通过以下方式部署的。
我使用了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。
总的来说,我将回去尝试原始方式并更改权限,因为我发现这种方式不太安全,更多地依赖于我的托管客户服务。
*****注意***** 这个命令显然会删除您的public_html文件夹(有时也称为public或www)。你需要备份其中所有的文件,因为你正在删除它。此外,你需要准备好通过客户服务来恢复它。许多托管服务不允许你自己重新创建文件夹。
rm -rf public_html/
真的很可怕! - Set Kyar Wa Lar