Страницы - поддомены

Всем привет!
Возникла потребность показывать страницы в качестве поддоменов, причем сохраняя возможность вложенности страниц.
Не нашел готового решения, потому результатом стал плагин, который можно увидеть под катом.

Позволяет использовать обычные страницы в качестве поддоменов, примеры:

mysite.ru/test — Изначальный адрес.
test.mysite.ru — Новый адрес с поддоменом.

Также работает и с дочерними страницами, примеры:

mysite.ru/test/page.html — Изначальный адрес.
test.mysite.ru/page.html — Новый адрес с поддоменом.

Сам плагин:
<?php
// Здесь указываем список поддоменов и id страниц, которые будут отображаться при переходе по ним
$domains = array (
    'test.mysite.ru' => 13,
    'test2.mysite.ru' => 15,
);
switch ($modx->event->name) {
    case 'OnHandleRequest':
        if (array_key_exists($_SERVER['HTTP_HOST'], $domains)) {
            $modx->config['site_start'] = $domains[$_SERVER['HTTP_HOST']];
        }
        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; 
}

Есть 2 замечания:
1) Плагин не будет работать с www доменами.
2) Страницы доступны по обоим адресам.
Олег
18 июля 2017, 07:47
modx.pro
23
6 682
+10

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

Павел Гвоздь
18 июля 2017, 15:04
+1
Добавьте кат… а то главная страница стремно смотрится…
    Олег
    18 июля 2017, 15:19
    0
    Да, не подумал.
    Андрей
    19 июля 2017, 08:31
    0
    Добрый день.
    Мне нужно сделать несколько копий сайта на поддомены, но при этом для удобства администрирования необходимо выполнить несколько условий:
    1. Все в одной админке. Здесь я думаю на выручку придут контексты.
    2. Доступ менеджерам дать только к определенному поддомену (каждому к своему).
    3. Все товары (страницы сделаны на компоненте minishop2, хотя сайт не является интернет-магазинов в общем понимании.) должны работать с общей базы. То есть все товары нужно администрировать с основного домена, а на поддоменах они бы просто отображались. Это самый сложный для меня момент. Подскажите как сделать.
      Олег
      19 июля 2017, 10:32
      0
      Чтобы не воротить дел с контекстами можно попробовать сделать через этот плагин, тогда можно будет любую страницу сделать поддоменом — внутри поддомена можно будет добавлять товары, все в одном контексте.
      И для каждого поддомена делать новую политику доступа.
        man
        man
        19 июля 2017, 10:40
        0
        А разве тут эта проблема не решается?
        Т.е. не надо делать копии сайтов а можно просто воспользоваться решение предложенным автором.
        1) использовать контексты по моему совсем не обязательно…
        2) доступ для менеджеров ограничивается через «Группы ресурсов»
        3) в итоге на выходе получаем то, что вам нужно. Админка в одном месте, общая база, разные доступы у каждого из менеджеров.
          Андрей
          19 июля 2017, 13:12
          0
          Я так понимаю, что здесь речь идет о странице, а у меня к примеру товар будет при таком плагине доступен по адресу вида poddomen.site.ru/catalog/tovar.html?
            Олег
            20 июля 2017, 18:09
            0
            Верно, создается страничка с адресом poddomen, и она будет доступна по адресу poddomen.site.ru
            Главное ее в плагине добавить в список.
              Андрей
              20 июля 2017, 18:11
              0
              Я имею ввиду, что у меня не сайт-одностраничник — если создать поддомен и его добавить в список — все внутренние страницы поддомена также будут доступны или их также нужно прилить в список?
                Олег
                20 июля 2017, 18:33
                0
                Все внутренние страницы будут доступны, список задается только чтобы указать, какие поддомены вообще должны работать — дабы не делать все страницы поддоменами.
                  Андрей
                  20 июля 2017, 18:34
                  0
                  Окей, спасибо. Попробую, отпишусь.
        Andrei
        20 июля 2017, 15:22
        0
        Очень нужное для меня решение!
        Только теперь нужно будет протестировать в сбоке — у меня стоит замечательный плагин Ильи Уткина autoRedirector + его же решение для редиректа на https. Главное, чтобы он мне циклический редирект не отдал)
          Олег
          20 июля 2017, 18:32
          0
          Да не должен, разве что со страницы test.site.ru сделать редирект на site.ru/test
          Андрей
          23 июля 2017, 15:23
          0
          Добрый день.
          Подскажите где делаю не так?
          1. Создал страницу Тест, адрес у нее site.ru/test
          2. Создал плагин на события OnHandleRequest и OnPageNotFound
          3. При переходе по test.site.ru отдает ошибку dns.
          Пошел другим путем и помимо предыдущих шагов сделал настройку для домена — поддомены в отдельной диретории и создал сам поддомен.
          Стал отдавать код 200, но с тем контентом, что есть на самом поддомене.
            Олег
            23 июля 2017, 20:50
            0
            Да, этого я не уточнил.
            У домена могут быть синонимы, например — site.ru и www.site.ru
            В синонимы нужно добавить требуемые поддомены.
              Андрей
              23 июля 2017, 21:55
              0
              То есть создаем поддомен физически и прописываем его в синонимах у основного домена?
                Олег
                23 июля 2017, 23:38
                0
                Нет, создавать поддомен не нужно.
                Должны быть выполнены 2 условия:
                1) Этот поддомен ссылается на нужный ip адрес в DNS записях.
                2) Для нужного сайта должен быть назначен данный поддомен как синоним.

                Плагин должен работать, если выполнены оба условия.
                  Андрей
                  24 июля 2017, 22:18
                  0
                  Хорошо, сделал так как вы сказали. теперь при переходе на поддомен у меня показывается нужная страница, но вся структура сайта так и осталась на основном — все меню ведет на основной домен. В принципе я так и предполагал. Скажите, какие нужны настройки чтобы полностью задублирвоать на поддомен сайт?
                    Олег
                    15 августа 2017, 15:31
                    0
                    Можно настроить редирект с основного домена или вывести несколько пунктов меню вручную, к сожалению не вижу способов настроить wayfinder/pdomenu на корректную работу
            Стас
            02 августа 2017, 18:12
            0
            Большое человеческое спасибо за решение! Как же давно его не хватало!!!
              Alexandr
              23 мая 2018, 09:17
              0
              Здравствуйте.

              А можно подробней написать как его использовать? Я создал плагин, но не знаю как его использовать. Помогите! Спасибо!
                Евгений
                22 апреля 2019, 20:41
                0
                Присоединяюсь к просьбе

                Или может уже разобрались?
                Евгений
                27 октября 2023, 12:56
                0
                MODX Revolution 2.8.5-pl
                Не работает плагин, настроил всё правильно, отображает на поддомене просто главную страницу
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  22