Использование шаблонов для соответствия всем, кроме основного домена и www в Laravel - PullRequest
1 голос
/ 17 апреля 2019

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

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

// 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...