4

私のlaravel 5アプリケーションにはいくつかのサブドメインがあり、各サブドメインにはメール、nocaptchaなどの特定の構成があります.

特定のサブドメインで動作するように .env ファイルを設定する方法

4

4 に答える 4

4

はい、.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

于 2015-04-26T18:02:31.397 に答える
3

私が見つけた最善の解決策は、.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」という新しいディレクトリを作成し、設定ファイルを次のように追加します。

  • "sub1.env",
  • 「sub2.env」など

(もちろん、現在のようにルートに保持することもできますが、多くのサブドメインでは、ディレクトリに移動する方が良い => よりきれいに見える => みんな幸せです! :) )

于 2015-12-11T15:21:15.093 に答える
0

私は同じ問題を抱えていました.@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__.'/../') );

それが誰かを助けることを願っています

ご挨拶

于 2016-10-28T17:27:24.637 に答える
0

できません。各サブドメインは同じ環境で実行されます。

サブドメインごとの構成が必要な場合は、 configディレクトリに各サブドメインの設定で構成ファイルを作成するか、データベース アプローチを使用することをお勧めします。

于 2015-04-26T16:41:13.953 に答える