@adiletmurzaliev

Один сайт для доменов 3-го уровня?

Подскажите пожалуйста как реализуется подобный функционал:

Возьму как пример сайт schools.by
Данный сайт позволяет создавать подсайты для школ у которых будет домен 3-го уровня школа.schools.by
Я так понимаю, создавать каждый раз отдельный сайт для каждой школы невозможно, и весь функционал принадлежит одному приложению, которое каким-то образом обрабатывает запросы от доменов 3-го уровня.
При чем на подсайтах школ используются следующие запросы школа.schools.by/teacher/id, а не в таком виде schools.by/школа/teacher/id.
Как реализовать подобное на Yii2? Разрабатываю что-то наподобие вышеуказанного портала, где будет информация на основном домене 2-го уровня, и будут отдельные подсайты с одинаковым функционалом на доменах 3-го уровня.

Рабочие примеры:
https://schools.by/sites (главный сайт)
https://upk1.schools.by/ (подсайт)
  • Вопрос задан
  • 502 просмотра
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Настраиваете сервер, так что бы все запросы, в том числе с подоменов шли в index.php (стандартная точка входа, как и в обычном проекте yii) где запускается yii.
Далее 2 варианта. То что Rules with Server Names хорош если контролеры разные для каждого поддомена и т.п., но в Вашем случае я так понимаю, нужно иметь грубо говоря school_id. Все идентично, для всех школ те же контролеры и экшены, но местами school_id, который видимо и есть поддоменом вносит кастом.
Я не пробовал такое, но теоретически можно просто сделать alias, например в
common\config\bootstrap.php добавить что-то типа:
Yii::setAlias('@school', $_SERVER['SERVER_NAME']);
только предварительно проверив, что отдает $_SERVER['SERVER_NAME'], там в зависимости от настроек сервера может быть много неожиданностей
Ну и потом юзать напримеp:
public function getPrepod(){
  return $this->hasOne(Prepod:classname, ['id'=>'prepod_id'])->andWhere(['school_id'=>Yii::getAlias('@school')]);
}

Но повторюсь не пробовал.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы