设置 laravel.env 的位置

Set location of laravel .env

所以我刚刚向我的生产服务器发布了 laravel 的构建。但是 .env 文件在我上传时是可读的。所以我将它上传到我网站的根目录 public_html/ 目录旁边。

我的问题是:如何告诉laravel .env 文件所在的位置?当我将它放在 public_html/ 文件夹中时它起作用了,但是我如何告诉它在根文件夹中查找?

您需要上传到 public_html 的是 Laravel 安装中 public 目录的内容,包括任何 JavaScript 文件、CSS 文件或图像客户端应该可以访问,其他所有内容都应该放在 public 目录之外。

如您在 official documentation 中所见,.env 文件必须位于 Laravel 应用程序的根目录中。无法更改文件位置(我认为也没有意义)。

此外,根文件夹不应是 public 文件夹,因为 .env 不应暴露给 public 访问权限,否则它的主要安全目标将完全丧失.

这样你可以从其他位置访问 .env 文件,但不利于安全。

your-project/bootstrap/app.php

$app = 新 Illuminate\Foundation\Application( 真实路径(DIR.'/../') );

$app->useEnvironmentPath(base_path('foldername/'));

为了安全起见,在 .htaccess 文件中添加此代码

<Files .env>
order allow,deny
Deny from all
</Files>

bootstrap/app 中设置环境路径。php:

$app->useEnvironmentPath($env_path);

例如,我项目的目录布局:

 webapp 
 -laravel 
 -public
 -.env

env 文件的自定义路径

$app->useEnvironmentPath(
  dirname(__DIR__, 2)
);

我最终设置了一个从 public 到 public_html 的符号链接,一切都按预期工作

bootstrap/app中添加代码。php

$app = new Gecche\Multidomain\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__),
    dirname(__DIR__) . DIRECTORY_SEPARATOR . 'envfolder'
);