К содержанию

Как сделать редирект из плагина?

Друзья, памагитииии! Не хватает мозгов, есть плагин, который делает из URL поддомены, тут порядок. И сервер настроен, все поддомены смотрят на основной домен.
Плагин запускается на события OnHandleRequest и OnPageNotFound.

Вначале в цикле делаем список поддоменов из страниц, которые будут отображаться при переходе по ним. Все работает. Порядок. Если есть страница например site.ru/page то она откроется и ее контент по адресу page.site.ru.

Но вот засада, страница так же открывается и по старому адресу site.ru/page как теперь докрутить плагин так, что бы при переходе на страницу, был редирект на ее созданный поддомен?

Я думаю нужно получить ID и ALIAS текущей страницы, и сделать редирект на ее поддомен, но ничего не получается :(
пробовал так

$url = MODX_URL_SCHEME.$doc->get('alias').'.site.ru';
               $modx->sendRedirect($url);

Но ничего не получается :( редирект делается, НО страница page.site.ru куда делается редирект не работает, или ошибка 500 мол много переадресаций пишет. Я так понимаю редирект делается два раза, или еще что то. Пробовал даже на странице самой вызывать просто сниппет с редиректом, тоже беда. не работает 500 ошибка

$ids = $modx->resource->get('id');
$res = $modx->getObject('modResource', $ids);
$url = MODX_URL_SCHEME.$res->get('alias').'.site.ru';
$modx->sendRedirect($url);
Вот код самого плагина который делает поддомены, он простой. Вот как его докрутить что бы еще и редирект делал на поддомены со страниц для которых эти поддомены делает?

if(!$docs = $modx->getCollection('modResource', array(
    'parent' => 15,
    'published' => 1,
    'deleted' => 0,
    'searchable' => 1
))){return;}

$domains = [];
foreach ($docs as $doc) {
 $domains[$doc->get('alias').'.site.ru'] = $doc->get('id');
}

switch ($modx->event->name) {
    case 'OnHandleRequest':
        if (array_key_exists($_SERVER['HTTP_HOST'], $domains)) {
            $modx->config['site_start'] = $domains[$_SERVER['HTTP_HOST';

     /*  $parent = $modx->resource->get('parent');
            if($parent === 15){
               $url = MODX_URL_SCHEME.$doc->get('alias').'.site.ru';
               $modx->sendRedirect($url); 
            }
*/
        }
        break;
    case 'OnPageNotFound':
        if (array_key_exists($_SERVER['HTTP_HOST'], $domains)) {
            $subdomain = array_shift(explode('.', $_SERVER['HTTP_HOST']));
            if ($id = $modx->findResource($subdomain.$_SERVER['REQUEST_URI'] , 'web')) {
                $modx->sendForward($id);
            }
        }
        break; 
}
Роман
Роман
26 ноября 2019, 17:08
modx.pro
1 191
Реклама

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

Сергей Шлоков
Сергей Шлоков Старожил
27 ноября 2019, 15:13
Кабы понять какая задача?
    Роман
    Роман Старожил
    27 ноября 2019, 15:19
    Плагин делает поддомены из страниц например из site.ru/page в page.site.ru НО при этом контент доступен по обоим адресам, я хочу сделать со страниц site.ru/page редирект на page.site.ru, не получается НИКАК. Ошибка 500, страница не найдена. При попытке сделать редирект. Вопрос, как сделать редирект в такой ситуации?
      Сергей Шлоков
      Сергей Шлоков Старожил
      27 ноября 2019, 15:35
      Вопрос в том, зачем такой изврат?
        Роман
        Роман Старожил
        27 ноября 2019, 15:40
        А как вы предлагаете делать? Как сделать из страниц поддомены и при этом сразу сделать с них редирект на их поддомены? Автоматически! Вы не сможете посоветовать, потому что решений нет. Есть только этот плагин. Но он не делает редирект со страниц на поддомены.
          Сергей Шлоков
          Сергей Шлоков Старожил
          27 ноября 2019, 17:09
          Почему нельзя сделать сразу поддомены?
            Роман
            Роман Старожил
            27 ноября 2019, 17:13
            Поддомены должны создаваться АВТОМАТИЧЕСКИ! ИЗ URL страниц из контейнера с id 15. Но с этим проблем нет, плагин это делает.
            Если вы про хостинг панель и руками создавать поддомены, это не вариант.
              Сергей Шлоков
              Сергей Шлоков Старожил
              28 ноября 2019, 07:59
              Но с этим проблем нет, плагин это делает.
              Да уж, проблем нет. 2 раза подряд слать один и тот же запрос в базу и поднимать объекты ресурсов. Хуже не придумаешь.

              $modx->config['site_start'] = $domains[$_SERVER['HTTP_HOST';
              Советую поставить какую-нибудь IDE с анализатором кода.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    7