У меня есть настройка, в которой я разрешаю пользователям выбирать поддомен или добавлять свои собственные доменные имена.Проблема в том, что некоторые мои маршруты "конфликтуют".Одним из них является маршрут /
.
Во-первых, я добавил группу доменов вокруг всех базовых маршрутов , которые отфильтровывали только мое доменное имя.Вот эта версия:
// 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?