Цель:
Использовать одну инсталляцию CMS для управления множеством сайтов.
Исходные данные:
два домена site1.ru site2.ru указывают на одну инсталляцию modx 1.0.2
(в apache можно реализовать через ServerAlias, к примеру)
1. mod_rewrite
Включим .htaccess и ЧПУ в админке.
В админке уберем префиксы и суффиксы url, включим использование вложенных url, разрешим повторяющиеся псевдонимы
Далее.
Создаем два ресурса «site1.ru» и «site2.ru» В основном меню ссылки на них должны быть вида (если заходить по домену site1.ru):
site1.ru/site1.ru
site1.ru/site2.ru
Далее. Редактируем файл .htaccess — комментируем третью строку и меняем четвертую:
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=%{HTTP_HOST}/$1 [L,QSA]
Результат: при заходе по домену site2.ru apache нас направит на наш созданный ресурс — site2.ru. Ура.
2. Ссылки
При построении меню по дочерним ресурсам site2.ru ссылки на эти ресурсы будут вида: "/site2.ru/res1", что после преобразования apache станет «site2.ru/site2.ru/res1» и мы получим 404. Надо сделать так, чтоб ссылки были вида "/res1".
Вариант1. «В лоб».
Правим сниппет вывода меню.
Редактируем файл assets/snippets/wayfinder/wayfinder.inc.php
после строк 381,382:
$tempDocInfo['link'] = $modx->makeUrl($tempDocInfo['id'],'','',$linkScheme);
}
Добавляем:
$tempDocInfo['link'] = '/'.substr($tempDocInfo['link'],(strpos($tempDocInfo['link'],'/',2)+1));
Сохраняем, чистим кеш.
Работает!
Вариант 2. (thnks to
grinant)
Правим механизм построения ссылок.
Редактируем manager/includes/document.parser.class.inc.php
После строки 1563
$url= $alias . $args;
добавляем
$url = substr($url,(strpos($url,'/')+1));
3. префикс www
При заходе по адресу
www.site1.ru получим 404.
Решаем с помощью mod_rewrite:
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^/?(.*) http://%1/$1 [R=301,L]
4. главная страница
При заходе на site1.ru modx нам отобразит содержание ресурса site1.ru, что не очень удобно — т.к. ссылку на этот ресур придется прописывать руками — wayfinder не сгенерирует.
Предлагаю следующее решение: определим что каждый сайт должен иметь главную страницу по url «home/» (т.е. для site1.ru создадим дочерний ресурс с «псевдонимом» home) и сделаем так, чтоб при заходе на site1.ru редиректило на site1.ru/home. Опять mod_rewrite:
RewriteRule ^/?$ /home [R=301,L]
upd. Привожу полный листинг .htaccess файла который получается в итоге.
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Fix Apache internal dummy connections from breaking [(site_url)] cache
RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
RewriteRule .* - [F,L]
# Rewrite www.domain.com -> domain.com
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^/?(.*) http://%1/$1 [R=301,L]
#multisite fix
RewriteRule ^/?$ /home [R=301,L]
# Exclude /assets and /manager directories from rewrite rules
RewriteRule ^(manager|assets) - [L]
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)$ index.php?q=$1 [R,L,QSA]
#multisite fix
RewriteRule ^(.*)$ index.php?q=%{HTTP_HOST}/$1 [L,QSA]
p.s. С MODx познакомился в общих чертах позавчера — не судите строго. revo beta5 не удалось ладом подружить с многосайтовостью (работает-
community.modx-cms.ru/blog/documentation/34.html#comment3206, но при таком использовании любые сниппеты выдают ошибку), поэтому решил попробовать реализовать многосайтовость на стабильной версии.
Комментарии (49)
RSS свернуть / развернутьвы не туда полезли, Вам надо лезть в makeUrl иначе ссылки вида [~id~] также не будут обрабатываться.
а так в целом хороший топик. плюсанул.
grinant
nep
grinant
nep
pitbull
как раз клепать сайты по 1000 руб за штуку… по моему ваще много ума для MODx в этом плане не надо :-)… сделал шаблоны главной + второстепенной + обратной связи… в каждый засунул путь к файликам картинок и т.п. в виде TV-параметра… и сиди клепай страницы одинаковой верстки разного оформления :)… хороша идея? правда?
надо бы так попробовать :-)
grinant
pitbull
grinant
Не понял, если честно вашей тирады в ответ на мое сообщение, адресованное не вам к тому же.
pitbull
Indra
dozen
А по поводу Рево — ну от беты пока требовать работоспособности не стоит.
Кстати, а где это вы бета-5 взяли? Из SVN?
iJack
бету 5, ага, из svn
nep
Solo
Andchir
Это решает вопрос единой инсталляции для нескольких сайтов, но не достигает цели редактирования нескольких сайтов из одной админки.
nep
Andchir
А в остальном — ради того и делал, чтоб была общая БД и общая админка.
nep
Indra
nep
давай попробуем
tiparepa.ru там правда социал енжин стоит, но если кто то возмется легко снесу, и сделаю экспериментальным без ограничения( с доступом для всех, для некоторых, без ограничений) все одно не занимаюсь(пустует)
предлагайте
1234
ManManovich
Так вот сразу и перенаправит. :) Там же в папочке с доменом site2.ru надо редирект оставить. А как правильно это сделать? Чего там в .htaccess написать надо?
ManManovich
ManManovich
ManManovich
надо сразу в конфиге апача указать, что site2.ru лежит в папке site1.ru.
nep
Хорошо, а что надо написать там чтоб работало?
Нашёл у себя в cpanel «настройки домена» там можно через кнопочки включить/настроить несколько функций. Внизу генерируется текст который по своей форме очень напоминает конфиг апача. Есть там функция «переадресация» она в этот текст добавляет тоже
Правда не работает вообще :(
С другой стороны .htaccess это тоже же конфиг апача, только предназначеный для индивидуальную пастройку доменов, чтоб всем подряд на лазить в общий конфиг. По идее через него как-то же можно объяснить как сделать редирект, чтоб работало.
ManManovich
ManManovich
я с хостингами не работал, поэтому не знаю где конкретно что настроить, но по логике, должна быть настройка указывающая к какой папке прикреплен сайт по домену. нужно указать одну и ту же папку для обоих доменов.
ну или наоборот — прикрепить к одной папке два домена.
nep
ага делаю, только для первого сайта все норм и редирект срабатывает на страничку home, а для второго нет, не срабатывает, и если у второго сайта УРЛ site2.ru, то открывается site1.ru/ite2.ru (именно без первой буквы в домене) вместо site2.ru/home
Обоим доменам указано что они находятся в одной и тойже папке на хостинге… что не так сделал? могу показать на примере в инете… как раз тестирую, но никак не получается
jeff-sett
и при заходе на сайт site2.ru не ридеректит на /home =(((
jeff-sett
Почему так происходит… хз. Выложите .htaccess файл — попробую помочь.
nep
jeff-sett
и все бы хорошо… но при наборе сайта например site1.ru — все гууд, а если www.site1.ru то в адресной строке появляется сразу же такая конструкция site1.ru/index.php?q=www.site1.ru/ и со вторым доменом аналогичная байда… и в обоих случаях открывается страница с id=1, т.к. она прописана в настройках как 404 и 403 ошибка… в самой админке… что я не так сделал ?? помогите — очень хочу разобраться — голову уже сломал и так и эдак переделывал…
jeff-sett
jeff-sett
jeff-sett
jeff-sett
nep
jeff-sett
По второму: можно решить задачу заменив аналогичные правила на следующие:
статью поправлю — включу полный листинг .htaccess файла.
nep
после внесения такой правки в браузере происходит перенаправление на «www..com/» — имено вот так как написал =)…
jeff-sett
Впрочем, вот такой вариант работает
nep
jeff-sett
ввв.имя-сайта.ру/ввв.имя-сайта.ру/id
Как исправить ???
jeff-sett
pitbull
или нужно было использовать оба варианта ??? я использовал только «Вариант 2. (thnks to grinant)»
jeff-sett
Не работает — увы… могу показать сайты в личку… Вайфайндер пашет — Дитто нет, конструкция [~id~] тоже не пашет — ставлю ссылки руками — если страниц 5-10 не критично… а дальше жопа — все страницы в голове держать ?:)
jeff-sett
Simpo
jeff-sett
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.