Использование шаблонов для сопоставления всех, кроме основного домена и www в Laravel

#laravel

#laravel

Вопрос:

У меня есть настройка, в которой я разрешаю пользователям выбирать поддомен или добавлять свои собственные доменные имена. Проблема в том, что некоторые из моих маршрутов «конфликтуют». Одним из них является / маршрут.

Сначала я добавил группу доменов вокруг всех базовых маршрутов, которые отфильтровывали только мое доменное имя. Вот эта версия:

 // Base routes
Route::domain(config('app.domain')->group(function () {
    Route::get('/', 'HomeController')->name('home');
});

// Profile routes
Route::domain('{profileUrl}')->group(function () {
    Route::get('/', 'UserController@show')->name('users.show');
});
 

Но тогда базовые маршруты не совпадают www.domain.com . Что заставило меня подумать, что я должен каким-то образом использовать регулярное выражение для исключения домена www из маршрутов профиля. Это означает, что базовые маршруты будут действовать как запасной вариант. Итак, я изменил свои маршруты на это:

 // Profile routes
Route::domain('{profileUrl}')->group(function () {
    Route::get('/', 'UserController@show')->name('users.show');
});

// Base routes
Route::get('/', 'HomeController')->name('home');
 

И попытался исключить маршруты, зарегистрировав шаблон, подобный этому:

 Route::pattern('profileUrl', '^(?!(domain.com|www.domain.com)$).*');
 

Но поскольку маршрутизатор Laravel использует Str::is() для сопоставления шаблоны, регулярное выражение не работает.

Я знаю, что мог бы решить эту проблему с помощью nginx, но для этого потребуется еще больше настроить все серверы prod staging dev. Я бы предпочел, чтобы это было в моей кодовой базе.

Как мне сопоставить все запросы, кроме основного домена и поддомена www, в группе маршрутизаторов Laravel?