複数ドメイン名の問題を解決するLaravelルーティングドメインの詳細説明

藏色散人
リリース: 2021-03-31 09:00:49
転載
3913 人が閲覧しました

以下は、laravel の複数ドメイン名の問題を解決するための Laravel ルーティング研究ドメインを紹介するチュートリアルコラムです。

複数ドメイン名の問題を解決するLaravelルーティングドメインの詳細説明

複数ドメイン名の問題を解決するためのドメインの Laravel ルーティング研究

資料の準備

  • きれいなlaravel
  • 2 つの Nginx 構成ファイル、主な構成は次のとおりです。

    server_name *.amor_laravel_test_1.amor;
    root /var/www/amor_laravel_test/public;
    index index.php index.html index.htm;
    ログイン後にコピー
    server_name *.amor_laravel_test.amor;
    root /var/www/amor_laravel_test/public;
    index index.php index.html index.htm;
    ログイン後にコピー
#ドメイン名をパラメータに分割します

Route::domain('{account}.{webname}.{suffix}')->group(function () {

    Route::get('user/{id}', function ($account, $webname, $suffix, $id) {
        // 可以在请求中接收到被分割的参数,可能的使用场景:在单独路由中需要根据不同的域名处理不同的需求

        dd($account, $webname, $suffix, $id);

    });
});
ログイン後にコピー

注意: アカウントが固定されていない場合は、Nginx サーバー名を汎用として構成できます: #.example.com

複数のドメイン名について

2 つの異なるドメイン名を次のように構成します:

  1. server_name *.amor_laravel_test.amor;
  2. server_name *.amor_laravel_test_1.amor;
Laravel を異なるドメイン名と一致させるにはどうすればよいですか?

方法 1: ドメインを使用して、route/web.php

Route::domain('{account}.amor_laravel_test.amor')->group(function () {

    Route::get('user/{id}', function ($account, $id) {
        //

        dd($account, $id);

    });
});

Route::domain('{account}.amor_laravel_test_1.amor')->group(function () {

    Route::get('user/{id}', function ($account, $id) {
        //

        dd(111, $account, $id);

    });
});
ログイン後にコピー

方法 2: 設定によって区別するRouteServiceProvider

    メソッドの追加:
    protected function mapSelfRoutes()
    {
        Route::domain('{account}.amor_laravel_test_1.amor')
            ->middleware('web')
            ->namespace($this->namespace)
            ->group(base_path('routes/self.php'));
    }
ログイン後にコピー
    Registration
    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        $this->mapSelfRoutes();

        //
    }
ログイン後にコピー
    ルーティング ファイルの追加
Route::get('/user', function ($account) {
    dd($account);
});
ログイン後にコピー

注: すべてのドメインを設定する必要があります。self のみが設定されている場合は、同じリクエスト パスの下で、設定されていないドメインが最初に一致します。

[推奨:

最新の 5 つの Laravel ビデオ チュートリアル ]

複数のドメイン名でのルーティングにおけるアクションの説明

まず、そのアクションを知る必要があります。ルートがバインドされるコントローラーを決定しますが、もう 1 つの注意点があります。ルートの Action 属性は、補助関数 Route() によって生成される URL を決定します。

ルーティング構成が次のようになっているとします。

  • 最初のルート

    Route::get('/', function () {
        if(\Illuminate\Support\Facades\Auth::check()) {
            return redirect('index');
        } else {
            return redirect('login');
        }
    });
    ログイン後にコピー
    ログイン後にコピー
  • 2 番目のルート

    Route::get('/', function () {
        if(\Illuminate\Support\Facades\Auth::check()) {
            return redirect('index');
        } else {
            return redirect('login');
        }
    });
    ログイン後にコピー
    ログイン後にコピー
まったく同じです。両方とも組み込みのログイン ルートを呼び出し、コントローラーも同じです。template

<form method="POST" class="form-horizontal" action="{{ route(&#39;login&#39;) }}">
---
</form>
ログイン後にコピー
route() 補助関数のフォーム フォームを見てみましょう。ルート名リスト ロードされたログイン。これら 2 つのルーティング ファイルを RouteServiceProvider に同時にロードすると、

public function map()
{
    $this->mapApiRoutes();

    $this->mapWebRoutes();

    $this->mapSelfRoutes();

    //
}
ログイン後にコピー
その場合: 名前空間またはコントローラを区別しないと、ルート補助関数によって生成された絶対パスが最後のルート ドメインになります。したがって、ロジックに一貫性があり、簡単な変更によって異なるドメイン名で異なるサイトを区別したいだけの場合は、判断を下してオンデマンドでロードする必要があります:

public function map()
{
    if(request()->getHost() == env('ONLINEDOWN_DOMAIN')) {
        $this->mapApiRoutes();
    }

    if(request()->getHost() == env('PCSOFT_DOMAIN')) {
        $this->mapPcsoftRoutes();
    }

    $this->mapWebRoutes();
    //
}
ログイン後にコピー
概要:

1。 2 番目の方法は、ドメイン名を区別するために推奨されます。利点は、ルーティングが分離され、構造が明確になることです。

2. ドメインは、サブドメイン名を区別するために使用できるだけでなく、パラメータの分割にも使用できます。
3. Laravel に注意してください。慎重に実行し、経験して、ルーティングの一致順序についてよく理解していただければ幸いです。
4. ドメイン名が変更されました。区別できるため、異なるコントローラーにバインドしたり、異なるモデルをバインドしたりできます。

以上が複数ドメイン名の問題を解決するLaravelルーティングドメインの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート