部署Laravel应用

时间:2018-06-29 21:01:22

标签: laravel .htaccess laravel-5 deployment

我正在尝试部署我的Laravel应用并阻止对其他文件的访问,例如.env 我将所有的laravel应用程序放在www文件夹中,并添加了htaccess:

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

但是当我转到域URL时,我拥有了所有文件..好像我的htaccess无法正常工作(他在Laravel应用的根目录上)

This is what I get when I go to my website url (this is the www foolder)

1 个答案:

答案 0 :(得分:0)

这是仅使用放置在Laravel根目录中的.htaccess文件的简单方法-例如与appbootstrapconfig并排放置,...无需对代码进行任何更改。

该文件重写了所有请求,因此请求/file.png实际上将返回/public/file.png,而其他任何内容都将路由到/public/index.php。这样还可以确保无法访问public文件夹之外的任何内容,从而保护.envdatabase/*之类的敏感文件。

简单方法

此方法假定DOCUMENT_ROOT由您的Apache服务器正确设置。首先尝试此方法,仅在服务器上不起作用时才使用第二种方法。

.htaccess

RewriteEngine on

# serve existing files in the /public folder as if they were in /
RewriteCond %{DOCUMENT_ROOT}public%{REQUEST_URI} -f
RewriteRule (.+) /public/$1 [L]

# route everything else to /public/index.php
RewriteRule ^ /public/index.php [L]

稍微复杂一点的方法

如果服务器未正确设置DOCUMENT_ROOT,则需要在RewriteCond中使用绝对路径。也就是说,服务器文件系统上的绝对路径。您可以通过将以下脚本复制到Laravel安装所在的目录并访问其URL(即http://example.com/get_doc_root.php)来获得它。

get_doc_root.php

<?php
echo getcwd();

这应该导致类似/var/www/example.com/web的情况。使用以下.htaccess文件,并将[[your path]]替换为您得到的实际路径。

.htaccess

RewriteEngine on

# serve existing files in the /public folder as if they were in /
RewriteCond [[your path]]/public%{REQUEST_URI} -f
RewriteRule (.+) /public/$1 [L]

# route everything else to /public/index.php
RewriteRule ^ /public/index.php [L]

在我们的示例中,RewriteCond行如下所示:

RewriteCond /var/www/example.com/web/public%{REQUEST_URI} -f