私のlaravel 5アプリケーションにはいくつかのサブドメインがあり、各サブドメインにはメール、nocaptchaなどの特定の構成があります.
特定のサブドメインで動作するように .env ファイルを設定する方法
私のlaravel 5アプリケーションにはいくつかのサブドメインがあり、各サブドメインにはメール、nocaptchaなどの特定の構成があります.
特定のサブドメインで動作するように .env ファイルを設定する方法
はい、.env
サブドメインごとに個別のファイルを使用できるため、構成で環境変数を使用すると、大幅な変更なしで機能します。
bootstrap/env.php
次の内容でファイルを作成します。
<?php
$app->detectEnvironment(function () use ($app) {
if (!isset($_SERVER['HTTP_HOST'])) {
Dotenv::load($app['path.base'], $app->environmentFile());
}
$pos = mb_strpos($_SERVER['HTTP_HOST'], '.');
$prefix = '';
if ($pos) {
$prefix = mb_substr($_SERVER['HTTP_HOST'], 0, $pos);
}
$file = '.' . $prefix . '.env';
if (!file_exists($app['path.base'] . '/' . $file)) {
$file = '.env';
}
Dotenv::load($app['path.base'], $file);
});
bootstrap/app.php
次に、カスタムenv.php
ファイルをロードするように変更します。追加するだけです:
require('env.php');
後
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
testing.app
これで、たとえば を使用する場合など、ドメインごとに個別の env ファイルを作成できます。abc.testing.app
また、メイン ドメイン用のファイル (およびカスタム env ファイルを持たないすべてのサブドメイン用) と、サブドメインのカスタム env 変数用のファイルを作成できます。def.testing.app
.env
.abc.env
.def.env
私が見つけた最善の解決策は、.htaccess と環境変数を使用することです。
.htaccessに次の行を追加します。
<If "%{HTTP_HOST} == 'sub.domain'">
SetEnv APP_DOMAIN sub
</If>
アプリの初期化後に bootstrap/app.php に追加します。
//own env directory for separate env files
$app->useEnvironmentPath( realpath(__DIR__ . '/../env/') );
//separate files for each domain (see htaccess)
$app->loadEnvironmentFrom( getenv('APP_DOMAIN') . '.env' );
Laravel ルートに「env」という新しいディレクトリを作成し、設定ファイルを次のように追加します。
(もちろん、現在のようにルートに保持することもできますが、多くのサブドメインでは、ディレクトリに移動する方が良い => よりきれいに見える => みんな幸せです! :) )
私は同じ問題を抱えていました.@Marcinの回答に基づいて、これを作成しました(laravel 5.2.Xで動作します)
bootstrap/app.php に追加しました
if (isset($_SERVER['HTTP_HOST'])) {
$hostArray = explode('.', $_SERVER['HTTP_HOST']);
//if the address is a subdomain and exist the .xxx.env file
$envFile = sprintf('.%s.env', $hostArray[0]);
if (count($hostArray) > 2 && file_exists(sprintf('%s/%s', $app['path.base'], $envFile))) {
$app->loadEnvironmentFrom($envFile);
}
}
後
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
それが誰かを助けることを願っています
ご挨拶
できません。各サブドメインは同じ環境で実行されます。
サブドメインごとの構成が必要な場合は、 configディレクトリに各サブドメインの設定で構成ファイルを作成するか、データベース アプローチを使用することをお勧めします。