ホームページ  >  記事  >  PHPフレームワーク  >  複数ドメイン名の問題を解決するLaravelルーティングドメインの詳細説明

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

藏色散人
藏色散人転載
2021-03-30 17:15:053897ブラウズ

以下は、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 までご連絡ください。