Автор оригинала: 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
О многодоменных именах
Настройте два разных доменных имени следующим образом:
имя сервера *.amor_laravel_test.amor;имя сервера *.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();
//
}Вывод:
- Рекомендуется второй способ различения доменных имен, который имеет преимущества разделения маршрутизации и четкой структуры.
- Домен может использоваться не только в качестве отличительного имени поддомена, но и в качестве параметра сегментации, различения различных доменных имен и т.д.
- Обратите внимание на последовательность сопоставления маршрутов Laravel. Я надеюсь, что вы сможете сделать это тщательно, испытать это и иметь хорошее представление об этом.
- Теперь, когда доменные имена различены, вы можете привязываться к разным контроллерам или к разным моделям и гибко использовать их.
Оригинал: “https://developpaper.com/domain-of-laravel-routing-research-solves-multi-domain-name-problem/”