Мультидоменность в 2.5 КАК?

Друзья, раньше мнгосайтовость получалась добавления в индекс.пхп:
switch ($modx->getOption('http_host')) {

   case 'www.subdomain.blabla.ru:80':
   case 'www.subdomain.blabla.ru':

  $modx->initialize('bio');
      break;
 
   default:
      $modx->initialize('web');
      break;
}
Но теперь меня при наборе www.subdomain.blabla.ru перекидывает на основной контекст да еще и с адресом www.blabla.ru

htacess закоментировал, чтоб не путался, id первых страниц для контекстов прописал

Кто-нибудь в курсе, может поменялось чего в алгоритме? Вроде как site_url и base_url уже устарели. Да и http_host чего-то среди основных настроек не вижу.
anatol
09 мая 2016, 06:12
modx.pro
3
3 377
0

Комментарии: 9

    anatol
    10 мая 2016, 09:10
    0
    Сделал по инструкции для субдоменов — наблюдаю такое поведение:

    domain.ru — отдается контекст 1
    www.domain.ru — отдается контекст 1
    sub.domain.ru — отдается контекст 2
    www.sub.domain.ru — отдается контекст 1

    При попытке раскомментировать
    #RewriteCond %{HTTP_HOST} .
    #RewriteCond %{HTTP_HOST} !^www\.domain\.ru [NC]
    #RewriteRule (.*) http://www.domain.ru/$1 [R=301,L]
    просто перекидывает с субдомена на основной домен и соответственно отдает первый контекст.

    http_host и base_url прописывал без указания :8080, т.к. в этом случае отдает всегда только первый контекст
      Воеводский Михаил
      10 мая 2016, 10:53
      +1
      В плагине должны быть оба домена указаны, для которых требуется переключать контекст.
        anatol
        10 мая 2016, 11:04
        0
        не понимаю, вот плагин
        <?php
        // Работаем только на фронтенде
        if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr') {return;}
        
        // Определяем запрашиваемый хост
        $host = $_SERVER['HTTP_HOST'];
        
        // Выбираем контекст с настройкой base_url
        $q = $modx->newQuery('modContextSetting', array('key' => 'http_host', 'value' => $host));
        $q->select('context_key');
        
        $tstart = microtime(true);
        if ($q->prepare() && $q->stmt->execute()) {
        	// Учитываем наш запрос в БД
        	$modx->queryTime += microtime(true) - $tstart;
        	$modx->executedQueries++;
        	// Получаем ключ контекста
        	if ($context = $q->stmt->fetch(PDO::FETCH_COLUMN)) {
        		// Web инициализируется в index.php - на него переключаться не нужно
        		if ($context != 'web') {
        			$modx->switchContext($context);
        		}
        	}
        }
        никаких доменов в нем не указывается.

        более того, ниже Василий пишет:
        Можно добавлять сколько угодно контекстов — плагин менять не придётся.
          Воеводский Михаил
          10 мая 2016, 11:11
          +1
          Данный плагин рассчитан только на один домен для каждого контекста. В твоем случае необходимо использовать немного другой плагин: modx.ru/novosti-i-stati/article/91
            anatol
            10 мая 2016, 11:40
            0
            Не переключает.

            Причем если в плагине в строке с основным доменом заменить контекст web на контекст sub — отдаст sub

            А дальше с субдоменом так же не отрабатывает.

            Такое впечатление, что директива о смене контекста позже еще раз перекрывается директивой о возврате контекста web на место. Точно нигде больше ничего не нужно удалять? Может index.php как-то рубит всю малину своим
            /* Initialize the default 'web' context */
            $modx->initialize('web');
            хотя нет. фигню порю. sub-то отдает по основному домену.

            вот код
            <?php
            if ($modx->event->name == 'OnHandleRequest') {
                if ($modx->context->get('key') == 'mgr') {return;}
                // сравнение текущего имени хоста и искомого
                if (strstr($_SERVER['HTTP_HOST'], 'bla.ru') != false) {
                    $modx->switchContext('web');
                    return;
                }
                if (strstr($_SERVER['HTTP_HOST'], 'sub.bla.ru') != false) {
                    $modx->switchContext('sub');
                    return;
                }
            }
              Воеводский Михаил
              10 мая 2016, 12:27
              +2
              Поменяй местами блоки if.
                anatol
                10 мая 2016, 12:50
                0
                обалдеть, работает. спасибо.

                т.е. плагин считает, что запрос sub.bla.ru соответствует условию bla.ru?
                но не наоборот.
                  Воеводский Михаил
                  10 мая 2016, 13:01
                  0
                  Все верно, так и должно быть. Смотрите, как работает функция strstr.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    9