Мультидоменность MODx Revolution
Подготовка хостинга
Перед тем как начать настройку мультисайтинга на MODX Revolution, необходимо подготовить наш хостинг:
- Установите в качестве корневой папки для всех необходимых домейнов папку, в которой установлен MODX Revolution.
- Нам понадобится доступ к файлам сайта, поэтому вам нужно позаботиться о том, чтобы у вас был FTP доступ или альтернативный вариант.
Необходимо настраивать только домены второго уровня (имя.ru), нет нужды конфигурировать домены третьего уровня (имя.имя.ru) на этом этапе. Их мы настроим в самом MODX Revolution в продолжении нашего урока.
Создание контекстов
Мультисайтинг на MODX Revolution реализуется посредствам "Contexts" (Контексты).
Когда вы впервые вошли в панель управления MODX Revolution, вы наверняка заметили в левом меню иконку маленького домика с названием "web". Это Контекст сайта по-умолчанию.
Мы добавим дополнительные контексты для каждого из наших сайтов. Создание контекстов производиться из меню System > Contexts: .
Как только вы перейдете на страницу контекстов, вы увидете таблицу с двумя уже существующими контектами - ‘web’ и ‘mgr’. ‘mgr’ - это контекст интерфейса управления MODX Revolution. Никакой из этих двух контектов (‘web’ и ‘mgr’) не может быть удалён.
Нажмите на кнопку ‘Create New‘ для создания контекста дополнительного сайта. ‘Content Key‘ это имя вашего контекста, которое будет отображаться в меню Resources в панели администрации.
Название контекста ‘Content Key‘ должно быть простым и без пробелов.
Обновите меню Resources (нажав на зеленые стрелочки в меню) и вы увидите новосозданный контекст.
Создайте главную страницу сайта и страницу ошибки в нашем новом контексте. В продолжении урока мы укажем, какая из страниц является главной и какая страницей ошибки.
На данном этапе у вас должно получиться следующее:
Конфигурирование контекста
Сейчас нам необходимо настроить наш новый контекст. Делается это посредствам добавления специальных системных настроек.
- Перейдитe к списку контекстов (System > Contexts).
- Нажмите правой кнопкой на новый контекст и выберите ‘Update Context‘ в открывшемся меню.
- Перейдите на закладку ‘Context Settings‘ и нажмите на кнопку 'Create New'.
- В открывшемся окошке нам необходимо заполнить только Key, Name и Value.
Повторите последний пункт для создания следующих параметров контекста (key - value):
site_start – ID главной страницы сайта (этот параметр написан ввиде цифры в скобках в конце каждого документа в меню Resources)
base_url – установите этот параметр “/” (без кавычек)
http_host – укажите в этом параметре домен вашего дополнительного сайта “имя.ru” (если речь идет о домейне третьего уровня, то в этом параметре необходимо указать имя.имя.ru)
site_url – укажите в этом параметре полный адрес вашего дополнительного сайта “http://имя.ru/” (можете указать с www)
В результате вы должны получить следующую картину:
Создание страницы ошибки не является обязательным для того, чтобы мультисайтинг заработал. Настройка страницы ошибки производится также как и настройка главной страницы, только в поле Key нужно указать error_page
Связывание домена с контекстом
Cуществует 2 варианта этой настройки.
Первый вариант - в этом случае все домены ссылаются на одну и туже папку.
Второй вариант - в этом случае у каждого домена своя собственная папка.
В данной статье мы разберем первый вариант.
Откройте в редакторе (к примеру Notepad++) файл index.php, который находится в корневой папке установленного MODX Revolution и прокрутите до конца документа. Вы должны обнаружить следующий код:
/* Initialize the default 'web' context */
$modx->initialize('web');
Замените вышеуказанные 2 строки на следующий код:
/* Настройка маппинга контекстов */
switch ($modx->getOption('http_host')) {
case 'modxdomain2.com:80':
case 'modxdomain2.com':
// Если http_host является дополнительным доменом, то переключить контекст
$modx->switchContext('Domain2');
break;
default:
// откат, возврат к основному контексту
$modx->initialize('web');
break;
}
Замените modxdomain2.com на имя вашего домена и Domain2 на имя вашего дополнительного контекста.
Если вам необходимо добавить дополнительные сайты, повторите следующие строки перед тегом default:
case 'modxdomain3.com:80':
case 'modxdomain3.com':
// Если http_host является дополнительным доменом, то переключить контекст
$modx->switchContext('Domain3');
break;
Разумеется предварительно создав для этого домен modxdomain3.com и контекст Domain3.
Всё
Оригинал статьи 20-11-2011 мультисайт уроки MODx Revolution контексты
Bezumkin
23.11.2011 19:58При такой конфигурации залогиниться сразу в 2 (и более) контекста не получится.
Valentin Rasulov
05.12.2011 14:40я не вижу необходимости изменять файл index.php, правильней создать плагин и повесить на OnHandleRequest.
SurRealistik
12.02.2012 08:59Уважаемый, вы забыли про параметр site_name на контекстов.
Я написал плагин на событие OnHandleRequest
В моём случае имена контекста идентичны доменам, по этому плагин получился вот таким
if($modx->context->get('key') != 'mgr')
{
if($host = $modx->getOption('http_host'))
{
$host = str_replace(':80','',$host);
if($host !== 'site.ru') // это для базового контекста web, тудать базовый сайт можно вписать, а можно просто этот контекст не использовать
{
$modx->switchContext($host);
}
else
{
$modx->initialize('web');
}
}
}
Сергей Савельев
28.01.2013 09:43Использование плагина описано на странице официального описания контекстов: http://rtfm.modx.com/display/revolution20/Using+One+Gateway+Plugin+to+Manage+Multiple+Domains
Но что теперь нужно указывать в файле .htaccess? Чтобы развести для двух доменных имён следующее:
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
Также не понятно, как определить для нескольких доменных имён правила исследования поисковыми системами файла robots.txt
Ещё одна проблема, с которой я не могу разобраться. Все чанки, сниппеты, плагины и переменные шаблонов должны иметь название, примерно: site1_general, site2_general...
И если сайта не два, но 5,10 или ещё больше, придётся иметь дело с очень большим количеством элементов. Следует обдумать как следует использование контекстов для содержания нескольких сайтов в одной системе, по крайней мере пока не решатся все эти проблемы.
Віктор Матушевський
28.01.2013 15:41По поводу htaccess - вот ссылка https://modx.ws/blog/blog-o-modx-revolution/nastrojka-chpu-i-htaccess-dlya-modx-revolution.html
Называть ТВ и чанки,сниппеты можно как угодно + можно создавать категории и помещать в них эти элементы. Читал когда-то мысль о создании контекстов для ТВ, чанков, сниппетов (но к чему она привела - неизвестно).
Сергей Савельев
28.01.2013 17:53По поводу .htaccess Вы Виктор неправильно меня поняли. Прочитайте, пожалуйста, внимательней. Две важные проблемы не решены.
Мысль нашёл: http://community.modx-cms.ru/blog/questions/9364.html. Судя по всему контексты для элементов не предусмотрены, но это даже не совсем и плохо, к примеру есть возможность использования одних и тех же элементов для разных сайтов ;)
Віктор Матушевський
28.01.2013 20:34Для каждого сайта свой .htaccess нужно делать, в котором указывать base папку для отдельного сайта.
Даниил
01.05.2013 09:33Сделал все по инструкции, но при заходе на поддомен: Fatal error: Class 'xPDOQuery_' not found
Подскажите, куда копать.