Создание мультисайта на MODX REVO
Лучше поздно, чем никогда. Как и обещал https://modx.pro/help/5194/ пишу про создание мультисайта на MODX REVO. Выкладываю в блог Готовые решения, т.к. в статье есть чуть-чуть кода.
Смысл всей затеи — упростить поддержку сайтов.
Под поддержкой понимаются любые действия связанные с работой сайта:
— размещение контента
— технические доработки сайта (программирование, верстка)
— консультирование модераторов, сеошников и т.д.
— бэкапы и восстановление информации
Кроме того, для упрощения работы необходимо внедрить стандарты, чтобы упростить рутину. Звучит громко, но на самом деле все просто — по «узким» моментам единожды принимаем какое-то решение и дальше просто поступаем по образцу, чтобы не тратить время на изобретение велосипедов. По принятому решению пишем короткую заметку в Евернот, чтобы потом когда понадобится можно было быстро найти, на чем основывалось решение.
В таких «стандартах» у меня:
— ресайз картинок с примерами кода
— настройки галереи fancybox с примерами кода
— создание файловых архивов
— названия чанков, например почти везде у меня есть чанки HEADER.site1, FOOTER.site1, ASIDE.site1 (в названии используем название контекста).
— и т.д. и т.п.
Т.е. единожды продумываем тонкости и решаем, что будем делать именно так и никак иначе. В дальнейшем это позволит избежать бардака и существенно ускорит процесс переноса существующих сайтов в мультисайт или разработку новых сайтов.
Плюсы и особенности «мультисайта»:
Важный момент, на который нужно обратить внимание по каждому сайту:
Не навредить SEO! Поскольку «вылететь» из поисковой выдачи Яндекса и Гугла — это плохо. Один из сайтов «вылетел», пришлось в срочном порядке восстанавливать все адреса + дополнительно настраивать контекстную рекламу, поскольку у владельца сайта это был основной канал коммуникации с клиентами.
Про мультисайты на modx не так много статей, когда я все это задумал, мне казалось, что или все слишком очевидно или просто особо этим никто не занимается.
При поиске через гугль нашел это:
_http://www.wiseguydigital.com/blog/2010/how-to-build-multi-site-modx-installations
_http://modx.ws/blog/uroki-modx-revolution/multisajt-na-modx-revolution.html
_http://www.belafontecode.com/modx-revolution-hosting-multiple-domains/
— в статьях описано примерно одно и тоже.
Как сделал я:
1. Сайты на виртуальном сервере, все домены ссылаются в одну папку, таким образом прекрасно работает плагин от Василия Наумкина bezumkin.ru/sections/tips_and_tricks/2439/, который переадресует каждый домен на свой контекст.
upd. Переадресация идет, если имя домена совпадает с настройкой контекста http_host.

2. Соответственно для каждого домена сделан отдельный контекст. В настройках контекста прописаны обязательные настройки:
site_start – ID главной страницы сайта (этот параметр написан ввиде цифры в скобках в конце каждого документа в меню Resources)
base_url – установите этот параметр “/” (без кавычек)
http_host – укажите в этом параметре домен вашего дополнительного сайта “имя.ru” (если речь идет о домейне третьего уровня, то в этом параметре необходимо указать имя.имя.ru)
site_url – укажите в этом параметре полный адрес вашего дополнительного сайта “http://имя.ru/” (можете указать с www)
— без них работать не будет.
Плюс все нужные индивидуальные настройки для каждого домена, напрмер «страница 404», «статус сайта», «использовать вложенные url». И настройки почты. Я чаще всего использую ЯндексПочту для домена, все прекрасно работает. Для каждого домена задаем отдельные почтовые ящики.
3. По настройке htaccess с «www» и «без www» создал топик в разделе Работа modx.pro/work/5786-configure-htaccess-to-multisite/. Помог Василий Наумкин.
Те записи, которые есть в примере файла htaccess дистрибутива modx для доменов и с «www» и «без www» не работают, сайт пишет про циклическую ошибку (комент Ильи Уткина в вышеуказанном топике про работу).
Для сайтов «с www» нужно прописать отдельное правило для этого сайта. А там, где ниже идёт правило для редиректа всех www на без-www нужно добавить условие не редиректить тот сайт.
Итого:
4. Сделал отдельный каталог со спецдиректориями по названию доменов для их индивидуальных файлов, изображений, шаблонов и т.д.

Путь от корня мультисайта индивидуально папки получился «s/site1/», «s/site2/» и т.д. для каждого сайта. В эти папки положил важные для SEO подпапки от каждого сайта, например:
«s/site1/assets/image»
«s/site1/assets/gallery»
«s/site1/assets/files»
«s/site1/assets/cashe»
Папки image, gallery, files и т.д. — из Modx Evo, там хранится проиндексированный поисковиками контент, но для того, чтобы этот контент открывался по прежнему адресу нужно из url убрать адрес спецдиректории для каждого домена, например «s/site1/».
5. Для того, чтобы вырезать из URL пути «s/site1/», «s/site2/» Василий Наумкин написал плагин и привел пример записи в htacess.
Он работает для всех контекстов и берёт список вырезаемых url из настройки контекст urlCut. Т.е. если надо вырезать кусок из url «s/site1/», то в настройках контекста добавляем запись «urlCut».

Затем нужно научить Apache2 загружать такие файлы из спецдиректории, прописываем в htaccess:
Соответственно для каждого домена нужно прописать похожее правило.
Мы сохранили прежние пути к проиндексированным в поисковых системах файлам, хотя физически она находятся в отдельных спецдиректориях. Таким образом не вредим SEO.
Для примера, картинка у нас физически находится по адресу:
site1.ru/s/site1/assets/image/image.jpg
Но открывается она по URL
site1.ru/assets/image/image.jpg
Т.е. после добавления сайта в мультисайт адреса изображений остались прежними.
По специфичным моментам настройки каждого отдельного домена в мультисайте вроде все.
Тонкости:
Я создал один контекст для образца, со всеми индивидуальными настройками которые мне нужны для каждого домена и потом просто копировал его, чтобы каждый раз не прописывать отдельные настройки для каждого контекста. Кроме того в этом образцовом контексте созданы ресурсы 404, sitemap и т.д., они тоже копируются при копировании контекста — это удобно.
Для переноса, в мультисайте настраивается тестовый домен, контент существующего сайта переносился «вручную». После того, как все перенесли и убедились, что все ок, в настройках контекста меняли имя домена на нужное и только потом переадресовывали домен на папку мультисайта.
Настройка прав и админки для юзеров с урезанными правами — стандартная, никаких особенностей, связанных с мультисайтом там нет. Просто настраиваем нужный доступ к контексту и юзер открывает админку по адресу его сайта «site1/manager/» и в дереве ресурсов отображается только его контекст.
Для каждого отдельного контекста создана отдельная категория, соответственно все чанки, шаблоны, доп.поля, плагины складываем туда, чтобы «не в одну кучу». При необходимости, для удобства разработки, можно настроить отдельного юзера с доступом в эту категорию, чтобы другие категории не мешались. Я так не делал, поскольку во многих случаях просто копировал код с «соседнего» сайта, например чанк вывода новости со всеми прописанными полями (заголовок и длинный заголовок, ресайз картинок, альты и тайтлы к картинке, вывод дат и т.д.). Это и упрощает разработку и позволяет не забыть важные моменты, т.е. не надо каждый раз вспоминать «что же нужно прописать».
Для удобства, в названиях чанков, шаблонов, доп.полей и т.д. используем названия контекста, чтобы было понятно, к чему он относится. Выше я писал про HEADER.site1.
Настроил ежедневный бэкап сайта по крону. Но своим клиентам раз в две недели автоматически рассылаю письма, что «создан полный бэкап сайта».
Неочевидный для меня момент — настройка шаблона тикетов по умолчанию, сначала пробовал вставлять этот шаблон в настройках контекста, ничего не получилось. В итоге настройка нашлась непосредственно в разделе с тикетами.

Стандартные компоненты, сниппеты и плагины прекрасно работают в мультисайте.
Для настройки меню сайта от корня достаточно указать необходимый контекст [[pdoMenu? &context=`site1`]]
Выводы:
Вставлять в мультисайт какие-то сложные сайты (интернет-магазины и т.д.) наверно не стоит.
Но что-то проще:
— лендинги;
— сайты без какого-либо сложного функционала, например сайт организации с лентой новостей, каталогом товаров и услуг — можно и по временным затратам встроить в мультисайт проще чем создать отдельный новый сайт + сильно экономим время на обслуживании.
Новые сайты я однозначно буду запускать в мультисайте. Если вдруг их нужно быть вынести в отдельный сайт — это очень просто, копируем полностью сайт, удаляем оттуда ненужные контексты и папки категорий.
Разработка сильно упростилась, поскольку все лежит в одном месте и можно копировать код кусками с работающих сайтов.
Наверняка я что-то упустил, если есть какие-то вопросы, спрашивайте.
Смысл всей затеи — упростить поддержку сайтов.
Под поддержкой понимаются любые действия связанные с работой сайта:
— размещение контента
— технические доработки сайта (программирование, верстка)
— консультирование модераторов, сеошников и т.д.
— бэкапы и восстановление информации
Кроме того, для упрощения работы необходимо внедрить стандарты, чтобы упростить рутину. Звучит громко, но на самом деле все просто — по «узким» моментам единожды принимаем какое-то решение и дальше просто поступаем по образцу, чтобы не тратить время на изобретение велосипедов. По принятому решению пишем короткую заметку в Евернот, чтобы потом когда понадобится можно было быстро найти, на чем основывалось решение.
В таких «стандартах» у меня:
— ресайз картинок с примерами кода
— настройки галереи fancybox с примерами кода
— создание файловых архивов
— названия чанков, например почти везде у меня есть чанки HEADER.site1, FOOTER.site1, ASIDE.site1 (в названии используем название контекста).
— и т.д. и т.п.
Т.е. единожды продумываем тонкости и решаем, что будем делать именно так и никак иначе. В дальнейшем это позволит избежать бардака и существенно ускорит процесс переноса существующих сайтов в мультисайт или разработку новых сайтов.
Плюсы и особенности «мультисайта»:
- у админа единый интерфейс управления всеми сайтами
- модераторы заходят в админки своих сайтов по своим адресам, т.е. site1.ru/manager/, site2.ru/manager/ и т.д. и со своей настроенной админкой
- похожий интерфейс бекэнда у все сайтов, т.е. можно отвечать на вопросы модераторов и сеошников просто по памяти без компьютера и интернета под рукой.
- меньше времени на обновление программного обеспечения сайтов, т.к. один раз для мультисайта, а не для каждого отдельно.
- во время переноса, некоторые сайты были переверстаны на bootstrap, соответственно потом, в случае доработок сильно экономим на верстке + сайт получается адаптированным для смартфонов (гугль утверждает, что это важно).
- в редакторе TinyMCE при вставке гиперссылки из редактора отображаются/ищутся все ресурсы мультисайта, т.е. но ограничивается текущим контекстом.
- не нашел как спрятать шаблоны не относящиеся к текущему контексту.
Важный момент, на который нужно обратить внимание по каждому сайту:
Не навредить SEO! Поскольку «вылететь» из поисковой выдачи Яндекса и Гугла — это плохо. Один из сайтов «вылетел», пришлось в срочном порядке восстанавливать все адреса + дополнительно настраивать контекстную рекламу, поскольку у владельца сайта это был основной канал коммуникации с клиентами.
Про мультисайты на modx не так много статей, когда я все это задумал, мне казалось, что или все слишком очевидно или просто особо этим никто не занимается.
При поиске через гугль нашел это:
_http://www.wiseguydigital.com/blog/2010/how-to-build-multi-site-modx-installations
_http://modx.ws/blog/uroki-modx-revolution/multisajt-na-modx-revolution.html
_http://www.belafontecode.com/modx-revolution-hosting-multiple-domains/
— в статьях описано примерно одно и тоже.
Как сделал я:
1. Сайты на виртуальном сервере, все домены ссылаются в одну папку, таким образом прекрасно работает плагин от Василия Наумкина bezumkin.ru/sections/tips_and_tricks/2439/, который переадресует каждый домен на свой контекст.
upd. Переадресация идет, если имя домена совпадает с настройкой контекста http_host.
2. Соответственно для каждого домена сделан отдельный контекст. В настройках контекста прописаны обязательные настройки:
site_start – ID главной страницы сайта (этот параметр написан ввиде цифры в скобках в конце каждого документа в меню Resources)
base_url – установите этот параметр “/” (без кавычек)
http_host – укажите в этом параметре домен вашего дополнительного сайта “имя.ru” (если речь идет о домейне третьего уровня, то в этом параметре необходимо указать имя.имя.ru)
site_url – укажите в этом параметре полный адрес вашего дополнительного сайта “http://имя.ru/” (можете указать с www)
— без них работать не будет.
Плюс все нужные индивидуальные настройки для каждого домена, напрмер «страница 404», «статус сайта», «использовать вложенные url». И настройки почты. Я чаще всего использую ЯндексПочту для домена, все прекрасно работает. Для каждого домена задаем отдельные почтовые ящики.
3. По настройке htaccess с «www» и «без www» создал топик в разделе Работа modx.pro/work/5786-configure-htaccess-to-multisite/. Помог Василий Наумкин.
Те записи, которые есть в примере файла htaccess дистрибутива modx для доменов и с «www» и «без www» не работают, сайт пишет про циклическую ошибку (комент Ильи Уткина в вышеуказанном топике про работу).
Для сайтов «с www» нужно прописать отдельное правило для этого сайта. А там, где ниже идёт правило для редиректа всех www на без-www нужно добавить условие не редиректить тот сайт.
Итого:
# Редирект site1.ru -> www.site1.ru
RewriteCond %{HTTP_HOST} ^site1.ru\.ru [NC]
RewriteRule ^/?(.*) http://www.site1.ru/$1 [R=301,L]
# Редирект всех остальных www -> non-www, кроме site1.ru
RewriteCond %{HTTP_HOST} !^www\.site1\.ru [NC]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]4. Сделал отдельный каталог со спецдиректориями по названию доменов для их индивидуальных файлов, изображений, шаблонов и т.д.
Путь от корня мультисайта индивидуально папки получился «s/site1/», «s/site2/» и т.д. для каждого сайта. В эти папки положил важные для SEO подпапки от каждого сайта, например:
«s/site1/assets/image»
«s/site1/assets/gallery»
«s/site1/assets/files»
«s/site1/assets/cashe»
Папки image, gallery, files и т.д. — из Modx Evo, там хранится проиндексированный поисковиками контент, но для того, чтобы этот контент открывался по прежнему адресу нужно из url убрать адрес спецдиректории для каждого домена, например «s/site1/».
5. Для того, чтобы вырезать из URL пути «s/site1/», «s/site2/» Василий Наумкин написал плагин и привел пример записи в htacess.
<?php
if ($modx->event->name != 'OnWebPagePrerender') {continue;}
$urlCut = $modx->getOption('urlCut');
if (empty($urlCut)) {
return;
}
$urls = array_map('trim', explode(',', $urlCut));
foreach ($urls as $url) {
$modx->resource->_output = preg_replace("#(/|){$url}#i", '/', $modx->resource->_output);
}Он работает для всех контекстов и берёт список вырезаемых url из настройки контекст urlCut. Т.е. если надо вырезать кусок из url «s/site1/», то в настройках контекста добавляем запись «urlCut».
Затем нужно научить Apache2 загружать такие файлы из спецдиректории, прописываем в htaccess:
# Работаем только для site1 и только для ненайденных файлов c указанными расширениями
RewriteCond %{HTTP_HOST} ^www\.site1\.ru [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(png|gif|jpg|jpeg|xls|doc|pdf)$ /s/med55/$0 [L,NC] Соответственно для каждого домена нужно прописать похожее правило.
Мы сохранили прежние пути к проиндексированным в поисковых системах файлам, хотя физически она находятся в отдельных спецдиректориях. Таким образом не вредим SEO.
Для примера, картинка у нас физически находится по адресу:
site1.ru/s/site1/assets/image/image.jpg
Но открывается она по URL
site1.ru/assets/image/image.jpg
Т.е. после добавления сайта в мультисайт адреса изображений остались прежними.
По специфичным моментам настройки каждого отдельного домена в мультисайте вроде все.
Тонкости:
Я создал один контекст для образца, со всеми индивидуальными настройками которые мне нужны для каждого домена и потом просто копировал его, чтобы каждый раз не прописывать отдельные настройки для каждого контекста. Кроме того в этом образцовом контексте созданы ресурсы 404, sitemap и т.д., они тоже копируются при копировании контекста — это удобно.
Для переноса, в мультисайте настраивается тестовый домен, контент существующего сайта переносился «вручную». После того, как все перенесли и убедились, что все ок, в настройках контекста меняли имя домена на нужное и только потом переадресовывали домен на папку мультисайта.
Настройка прав и админки для юзеров с урезанными правами — стандартная, никаких особенностей, связанных с мультисайтом там нет. Просто настраиваем нужный доступ к контексту и юзер открывает админку по адресу его сайта «site1/manager/» и в дереве ресурсов отображается только его контекст.
Для каждого отдельного контекста создана отдельная категория, соответственно все чанки, шаблоны, доп.поля, плагины складываем туда, чтобы «не в одну кучу». При необходимости, для удобства разработки, можно настроить отдельного юзера с доступом в эту категорию, чтобы другие категории не мешались. Я так не делал, поскольку во многих случаях просто копировал код с «соседнего» сайта, например чанк вывода новости со всеми прописанными полями (заголовок и длинный заголовок, ресайз картинок, альты и тайтлы к картинке, вывод дат и т.д.). Это и упрощает разработку и позволяет не забыть важные моменты, т.е. не надо каждый раз вспоминать «что же нужно прописать».
Для удобства, в названиях чанков, шаблонов, доп.полей и т.д. используем названия контекста, чтобы было понятно, к чему он относится. Выше я писал про HEADER.site1.
Настроил ежедневный бэкап сайта по крону. Но своим клиентам раз в две недели автоматически рассылаю письма, что «создан полный бэкап сайта».
Неочевидный для меня момент — настройка шаблона тикетов по умолчанию, сначала пробовал вставлять этот шаблон в настройках контекста, ничего не получилось. В итоге настройка нашлась непосредственно в разделе с тикетами.
Стандартные компоненты, сниппеты и плагины прекрасно работают в мультисайте.
Для настройки меню сайта от корня достаточно указать необходимый контекст [[pdoMenu? &context=`site1`]]
Выводы:
Вставлять в мультисайт какие-то сложные сайты (интернет-магазины и т.д.) наверно не стоит.
Но что-то проще:
— лендинги;
— сайты без какого-либо сложного функционала, например сайт организации с лентой новостей, каталогом товаров и услуг — можно и по временным затратам встроить в мультисайт проще чем создать отдельный новый сайт + сильно экономим время на обслуживании.
Новые сайты я однозначно буду запускать в мультисайте. Если вдруг их нужно быть вынести в отдельный сайт — это очень просто, копируем полностью сайт, удаляем оттуда ненужные контексты и папки категорий.
Разработка сильно упростилась, поскольку все лежит в одном месте и можно копировать код кусками с работающих сайтов.
Наверняка я что-то упустил, если есть какие-то вопросы, спрашивайте.
Комментарии: 104
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Как бы вы организовали работу с несколькими мультиязычными сайтами в одной админке?
Первый пример там как раз для /ru/, /en/.
Мультиязычный сайт у меня всего один, на там все тупо — просто отдельные ресурсы с отдельными шаблонами и контентом на английском языке — просто переведенный каталог товаров. И шапке сайта ссылки «ru»|«en». Ну т.е. нет никакого автоматического выбора по языку браузера и т.д.
Т е создать каталог, а выводить его как отдельный сайт.
банально сниппетом
[[!swland?
&ru=`русская`
&en=`английская`
&cn=`китайская`
]]
$url=explode('/', $_SERVER[REQUEST_URI]);
$ru = !empty($ru)? $ru: '';
$en = !empty($en)? $en: '';
$cn = !empty($cn)? $cn: '';
$land=$url[1];
if($land=='en'){
return $en;
}else if($land=='cn'){
return $cn;
}else{
return $ru;
}
Гораздо проще дать человеку .htaccess, чем объяснять, что такое Nginx и как писать для него правила.
я например меняла сортировку шаблонов в выпадающем списке
При очистке на modx.pro, первый раз главная грузится так:
Потом вот так:
То есть, очистки кэша никто не замечает — как это и должно быть.
После этого меняешь содержимое только нужного чанка и код меняется только на нужном сайте.
Получилось ли у кого-нибудь сделать авторизацию у каждого контекста по его же site_url?
site1.site.ru/manager
site2.site.ru/manager
site3.site.ru/manager
Выдает ошибку 404
Работает только site.ru/manager… можно авторизоваться по основному url… но хотелось бы по другому решить…
Комментирование строчки не помогло:
if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr') {return;}
Проверяйте настройки контекстов.
Самое, что интересное — всё работает, каждый контекст (сайт) загружается, все страницы работают…
Но, при попытке зайти в админку — выдает 404 ошибку…
Может дело в том, что у меня основной сайт лежит по адресу site.ru? а не site.site.ru?
Вы можете написать основные настройки Ваши или как у вас устроено… видимо какая-то мелочь не пропускает это дело…
В логах это — site1.site.ru: 127.0.0.1 [30/Dec/2015:01:56:35 +0300] «GET /mngredu HTTP/1.1» 404 171 "-" «Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0»
Спасибо!
уберите оттуда site1.site.ru
или вы опечатались, а затем исправили? (в письме мне пришло несколько иное)
В своем профиле добавьте возможность оправки личных сообщений
Но куча глюков вылезла, например права урезаны только до Content Manager и если нажать на иконку «страничка» — создать ресурс — почему-то работает в контексте web… и пишет ошибку доступа… (пытался добавить настройку — default_context — site1.site.ru, неудачно (( )
После этого понял, что по-любому нужно открывать админку по адресу — site1.site.ru/manager
А так фиг знает, может версии слишком новые или еще какая-нибудь ерунда… тыкаешься во всё подряд и никак не заработает…
Профиль открыл для сообщений
Спасибо!
Копируем контекст в дереве ресурсов:
Далее:
Он скопирует все ресурсы в контектсе.
Для модераторов каждого отдельного сайта настроены доступы к источникам файлов.
Но в результате получил 2 проблемы:
1. Не все стили подгружаются, потому как они стучаться по адресу например site.site.ru/css? а физически лежат по адресу site.ru/css Это можно конечно решить путем прописывания абсолютных путей, но это не решение ввиду того, что почти во всех устанавливаемых компонентах будет такая беда. И править вечно пути нет желания — хочется все упросить дом максимума.
2. Не получается зайти в админку — оно и понятно — в папке site.site.ru ее нет.
Подскажите мне по структуре файлов — не совсем понял, как нужно создать структуру. Говорят все в одну папку закинуть, какие файлы нужно переносить, подскажите плиз.
При переходе по адресу site.site.ru выдает 403 ошибку.
Если что-то осталось непонятно, формулируй вопросы точнее и полнее. Я не телепат, чтобы догадываться, что же на самом деле требуется и в чем сложность.
Есть поддомен site1.site.ru
папка поддомена у меня пустая, как я понял туда переносить никакие файлы не надо. Но при переходе по адресу поддомена вылетает 403 ошибка. Плагин для переключения контекстов есть. второй контекст называется site1.
Вы говорите, что нужно настроить так, чтобы site1.site.ru ссылался на папку site.ru? И делается это на хостинге. А как — подскажите, какие настройки нужно трогать?
На данный момент они сделали так — при обращении к site1.site.ru он переадресовывается на site.ru/site1/ и в строке браузера этот адрес стоит — что не совсем так, как хотелось бы. Хотелось бы чтобы адрес в строке браузера оставался site1.site.ru
Пиши доступ на почту, подумаем дальше.
Если да, то сколько времени занял процесс со всей шелухой и настройками?
P.S. Ай как не хочется уйти в безконечный марафон…
/etc/apache2/apache2.conf
для каждого домена добавлена запись:
Но подходит это только для виртуального хостинга. Написал в ТП Бегет с примером кода — жду ответа, как проделать тоже самое но обычном хостинге.
Но теперь проблема такого плана.
На сайте не отображаются картинки товаров minshop2
Возможно, нужно прописать как то пути в настройках контекста для minishop 2?
Кто подскажет в чем дело?
Был у тебя авто-редидект с нового домена на основной при открытии страниц нового домена?
Если да, тот как отключить такую переадресацию?
Для основного домена есть настройка автоподдомены — ее нужно было отключить.
Далее я создал папку внутри основного домена. Вернее, я сделал одну папку, а внутри нее уже папку по имени поддомена. Чтобы было потом легче ориентироваться, для какого домена где лежат файлы.
Далее я в настройках основного домена указал псевдоним вида *.site.ru
Самое интересное что поддомен я при этом вообще не создавал. И по этому моменту у меня еще есть вопросы к хостеру.
Далее я прописал в DNS-настройках A запись * = IP сервера
P.S. Переадрессация была у меня сначала с поддомена на папку внутри основного сайта. Хостер сказал что она настроена была в htaccess
Могу уточнить что именно он изменил там.
И про это:
можно подробнее.
У меня сначала стояла настройка — в папке основного сайта. А хостер сказал вообще отключить автоподдомены.
Походу у меня вообще другая пляска.
Странно, что при очевидных плюсах и выгодах мультисата на Modx, созданная ветка обсуждений такая сухая и равнодушная…
То есть у нового контекста задаем: ключ — site.ru; имя — site.ru Включая ".ru"?
Это тоже самое, что в разделе «Управление доменами» хостинга Бегет выбрать «Направить домен на существующую директорию»?
для каждого домена добавлена запись:
при этом DocumentRoot каждого отдельного сайта как раз ссылается на папку основного домена.
— здесь я наврал, имя домена должно совпадать с параметром http_host в настройках контекста
т.е. плагин bezumkin.ru/sections/tips_and_tricks/2439/ сравнивает имя домена с настройкой контекста http_host
А вот момент с «все домены ссылаются в одну папку» остается открытым. Установив плагин bezumkin.ru/sections/tips_and_tricks/2439/ и выполнив «Направить домен на существующую директорию» в Бегет получаю:
При открытии ресурса из нового контекста — сначала открывается URL нового домена (на доли секунды), а затем открывается URL основного домена с alias от нового.
Похоже на редирект 301 от хостинга, но в серверных делах я тугой. Может кто с форума поможет разобраться?
То есть выполняется требование №1 автора поста Однако, при открытии страницы из нового контекста происходит редирект на основной-домен.ru
Бегет говорит, что Переадресация на основной домен настроена в конфигурационном файле ./core/config/config.inc.php:
Почему такая Переадресация вообще происходит и как её отключить?
З.Ы. Также заметил, что открытие сайта нового контекста и последующая Переадресация на основной-домен просходит как при включенном, так и при отключенном плагине: bezumkin.ru/sections/tips_and_tricks/2439/
Пожалуйста, отзовитесь владельцы мультисайтов на «обычных» хостингах типа Бегет и поделитесь пошаговым опытом.
Особенно интересуют настройки хостинга для успешной работы мультисайта!
З.Ы. — данная тема уже первая в поисковиках по запросу «мультисайт Modx», а значит у программистов есть отличный шанс доказать свой профессионализм и найти новых заказчиков…
Удалось обойтись без создания папок в корне для каждого сайта — файлы отлично подгружаются из общей папки assets и не требуется вырезать часть URL.
Также избежал создания отдельных чанков для доп сайтов, кроме footer где стоит индивидуальный счетчик. Например, логотип сайта в header легко подгружается из общей кучи путем: . То есть создаем сколько угодно логотипов соблюдая название logo [[++site_name]].png и создавать отдельный чанк не нужно.
getTickets и pdoMenu отлично понимают контекст, хотя в некоторых случаях и пришлось добавить параметр &context=``
В итоге копирую «шаблонный» контекст и на него вешаю новый домен разделы и документы использую все чанки и шаблоны от основного сайта.
Однако остался нерешенный момент с файлом robots.txt, а именно строкой Host:
Пока её тупо удалил — посмотрим на реакцию поисковиков…
P.S. — Спасибо автору поста за идею — люблю все оптимизировать. Например, хостинг Бегет теперь обходится дешевле, т. к. тарифы привязаны к количеству сайтов, а количество доменов не ограничено. Думаю ход мысли вы уловили :)
Именно поэтому на modhost.pro количество доменов ограничено изначально.
В контексте создаем и публикуем ресурс (например, robots.txt) с пустым шаблоном: тип ресурса — документ, тип содержимого — text, псевдоним — robots. В содержимое пишем:
Столкнулся с задачей.
Что писать http_host, site_url когда домен вида «русскийсайт.ру», «поддомен.русскийсайт.ру»
???
Домен: русскийсайт.рф
Домен: XN--80APDBB9AHADMC.XN--P1AI
Не подскажите правила для .htaccess для головного сайта сайт.ru и его поддомена поддомен.сайт.ru, чтобы оба открывались без www? .htaccess у них общий.
Сейчас стоит
и когда захожу на поддомен.сайт.ru, то он переадресовывает на сайт.ru.
Правило
не работает ((
готов отблагодарить денюжкой
на
Для поддомена такое правило не требуется. Вряд ли по адресу www.поддомен.сайт.ru попадёте на поддомен.сайт.ru. Будет какая-нибудь ошибка типа сервер не найден. Склейка в этом случае не требуется.
но все безтолку.
Когда закрываю вообще все настройки, то вроде все работает, правда сейчас почему-то на дочерних страницах выходит 404 ошибка. Не силен в htaccess, поэтому ищу человека, который поможет разобраться.
Подскажите как правила Apache2 переделать под nginx
Попробовал вот так, не работает
У меня получается 5 регионов на поддоменах типа site.ru, kazan.site.ru, spb.site.ru, nn.site.ru, ekb.site.ru. Это планируется на контекстах реализовать по инструкции Безумкина.
И у каждого такого сайта 2 языка будет. На контекстах уже не получится, насколько я понимаю, т.к. их функции заняты. Что использовать в данном случае посоветуете?
file.modx.pro/files/1/6/e/16e4652a6c7eb72e4f71ee443fbb53be.jpg
file.modx.pro/files/8/f/c/8fc57695113aadff0da069775c615fbb.jpg
file.modx.pro/files/e/1/3/e13cd28dffc7e19edaafdc0d4373a30b.jpg
file.modx.pro/files/7/e/0/7e084603aedb4096a59958253ca04f13.jpg
при отключении плагина все работает корректно…
Сейчас есть домен domen.ru — он доступен по https соединению.
Есть poddomen.domen.ru — он сейчас доступен только по http.
При заходе на poddomen.domen.ru его редиректит на domen.ru
в .htaccess указано
Что бы сделать для поддомена https, нужно создать его в отдельной директории. Но тогда не работает мультисайтовость.
Подскажите, как сделать что бы не редиректило с poddomen.domen.ru на domen.ru?
Или как настроить мультисайтовость, в случае создания поддомена в отдельной директории?
А то получаеться, если много разных клиентов — (контекст), то показывает очень много шаблонов!
Если менялись бы они, тогда можно было как то убрать вообще выбор Шаблонов в редакторе Ресурса, на скрине я показал, что имею ввиду:
просто прописываете нужные поддомены в псевдонимах основного домена. Автоподдомены — отключены. Никакие папки создавать не нужно.
Домены второго уровня скорее всего также добавляются (еще не пробовал).
Прочитал почти все комментарии но не нашел вопроса с похожим запросом.
У меня есть много однотипных сайтов site-region1.ru, site-region2.ru, site-region3.ru и тд.
Для некоторых нужна мультиязычность (site-region3.ru русская версия, site-region3.ru/en/ — английская)
Каждый регион имеет свой контекст. И если есть языковая версия, то она выносится в новый контекст.
Использовал код для переключения контекстов отсюда — bezumkin.ru/sections/tips_and_tricks/2439/
Но использовал для доменов и поддоменов, который использует http_host для проверки.
Вот)))
Вопрос в том, как соединить эти 2 метода проверки, чтобы проверить http_host, а потом base_url?
Спасибо большое за любую помощь!
Было бы существенно проще, если бы язык шел поддоменом. en.site-region3.ru/
В текущем случае вы конечно осилите переключение языка основываясь на host + /lang/
Но останутся нерешенными проблемы внутри JS. Все ajax запросы будут улетать на базовый хост, и ответы будут приходить на базовом языке.
Поэтому ищу способ решения задачи в такой форме. Не совсем понял про JS, какие трудности могут возникнуть?
Возьмем к примеру компонент mSearch2 и его автодополнения в поисковой строке.
Компонент отправляет запросы к серверу, беря за основу текущий хост. Который всегда без сегментов адреса.
Сервер используя хост, получает язык контекста и отдает ответ на языке чистого хоста.
Таким образом находясь на адресе site-region3.ru/en/ сервер будет запрашивать контекст основываясь только на хосте site-region3.ru и язык ответа для поисковых запросов будет русский (ну или какой там будет основным)
И таких компонентов, которые берут за основу только хост — много. Их можно дорабатывать конечно. Просто возни больше.