Рубрики
Uncategorized

Домен Исследования маршрутизации Laravel Решает проблему с несколькими доменными именами

Автор оригинала: David Wong.

запасы резерва

  • Чистый laravel
  • Два файла конфигурации Nginx, основная конфигурация выглядит следующим образом:

Разделите доменные имена на параметры

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

    Route::get('user/{id}', function ($account, $webname, $suffix, $id) {
        // Partitioned parameters can be received in the request, possibly using scenarios: different requirements need to be handled according to different domain names in separate routing

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

    });
});

Будьте осторожны: Если учетная запись не исправлена, имя сервера Nginx может быть настроено как общее: *.example.com

О многодоменных именах

Настройте два разных доменных имени следующим образом:

  1. имя сервера *.amor_laravel_test.amor;
  2. имя сервера *.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'));
    }
  • зарегистрировать
    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        $this->mapSelfRoutes();

        //
    }
  • Добавление файлов маршрутизации
Route::get('/user', function ($account) {
    dd($account);
});

Будьте осторожны: Все домены должны быть заданы, и если задан только self, то домены без доменов сначала будут совпадать по одному и тому же пути запроса.

Объяснение действий при маршрутизации под многодоменными именами

Во-первых, нам нужно знать, какой контроллер определяет действие, к которому будет привязан маршрут, и еще одна вещь, которую следует отметить, заключается в том, что атрибут действия в маршруте определяет URL-адрес, сгенерированный вспомогательной функцией route (). Если наша конфигурация маршрутизации выглядит следующим образом:

  • Первый маршрут

  • Второй маршрут

Точно так же они называют встроенную маршрутизацию входа в систему, как и контроллеры. Давайте посмотрим на форму формы в шаблоне.

---

Вспомогательная функция route () считывает логин, загруженный в список имен маршрутизации, если мы загружаем оба файла маршрутизации в поставщике услуг маршрутизации одновременно.

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. Домен может использоваться не только в качестве отличительного имени поддомена, но и в качестве параметра сегментации, различения различных доменных имен и т.д.
  3. Обратите внимание на последовательность сопоставления маршрутов Laravel. Я надеюсь, что вы сможете сделать это тщательно, испытать это и иметь хорошее представление об этом.
  4. Теперь, когда доменные имена различены, вы можете привязываться к разным контроллерам или к разным моделям и гибко использовать их.

Оригинал: “https://developpaper.com/domain-of-laravel-routing-research-solves-multi-domain-name-problem/”