Маршрутизация фреймворка: работа с поддоменами

15 Сентября 2022 (ред)

(!) Примеры и описание для более новой версии фреймворка HLEB2 могут отличаться от приведенных в тексте.

Задать правила для поддоменов, а также, при надобности, для домена любого уровня, помогут два метода маршрутизации: domain() и domainTemplate().

// Файл /routes/main.php
 Route::domain("dev")->getGroup();
 Route::get("/", ... ); // dev.site.com или *.dev.site.com
 Route::endGroup();
 Route::get("/", ... ); // все запросы (site.com или *.site.com)

Второй параметр в этих методах указывает на соответствие уровню домена, начиная от домена верхнего уровня (1), домена (2) и поддоменов (3 по умолчанию и далее), а первый аргумент может быть перечнем допустимых значений. Например:

// Файл /routes/main.php
 Route::domain("sub4", 4)->domain("sub3")->get("/", ... ); // sub4.sub3.site.com или *.sub4.sub3.site.com
 Route::domain(["var1", "var2", null])->get("/", ... ); // var1.site.com, var2.site.com или site.com, а также *.var1.site.com или *.var2.site.com
 Route::domain(null)->get("/", ... ); // без поддоменов, только site.com
 Route::domain("sub4", 4)->domain("*")->get("/", ... ); // sub4.*.site.com или *.sub4.*.site.com
 // метод domain("*") добавлен для наглядности маршрута, его можно не указывать

Так как в этих примерах адрес роута одинаковый ("/"), то следует обратить внимание на очередность роутов, будет выбран первый совпавший по URL, поэтому рекомендуется сначала располагать частные случаи, а затем общие.

Привязка маршрутов осуществляется без формального разделения на домен и поддомены, только по уровням иерархии доменного имени, начиная от домена верхнего уровня. В комментариях к этим примерам "site.com" аналогичен любым вариантам домена второго и первого уровня.

Метод domainTemplate() отличается только тем, что в первом аргументе передаются значения для проверки на совпадение в регулярном выражении.

Для кириллических поддоменов возможно придётся задавать условия только после конвертации названия поддоменов в Punycode.

fomiash fomiash + 221
Опубликовано в PHP фреймворк HLEB
Для ответа вы можете авторизоваться


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.