Ну начнём с того, что на одной установке Битрикса можно сделать много сайтов (без покупки
Есть довольно подробный
[spoiler]
Какой способ выбрать?
Существует мнение, что пользователь выбирает для себя сам удобный способ многосайтовости, однако в действительности выбор способа зависит от настроек системы.
Первый способ предполагает (на папках), что сайты находятся в одном домене, но в разных папках. Он годится для создания сайтов на разных языках или, например, региональных сайтов одной компании.
Адреса сайтов будут иметь вид:
или
Если тематика сайтов разная, видимо, не обойтись без настройки второго способа, когда разные сайты находятся в разных доменах, пример:
Оба сайта работают на одной копии продукта, но внешне это никак не проявляется. Это выглядит привлекательнее, но требует чуть больше усилий для настройки.
Особо хочу обратить внимание, что далее речь идёт о работе на хостинге, когда все настройки сервера делает администратор. Если вы настраиваете многосайтовость локально, необходимо предварительно настроить виртуальные веб сервера. Можно посмотреть об этом на
Теперь несколько слов о том, как система определяет текущий сайт.
Откроем настройки сайта (Настройки - Настройки продукта - Сайты - Список сайтов):
Здесь можно указать доменное имя и папку сайта - это основные параметры настройки многосайтовости, остальные определяют приоритеты.
Сначала система проверяет текущий домен: из настроек всех сайтов выбираются домены и сопоставляются с доменом на котором находится пользователь. При этом сравнивается только правая часть до точки (т.е. все поддомены автоматически относятся к этому домену). Например, в настройках указано
example.com
а пользователь открыл
будет считаться условие выполненным. Но если он откроет my-example.com - это уже другой домен, его надо отдельно указывать в списке доменных имён.
Если доменные имена не указаны или на разных сайтах указаны одинаковые домены, то определение происходит по папке сайта. Обратите внимание, что здесь указывается папка относительно корня сайта (т.е. путь в URL), а не путь в файловой системе на сервере.
В дальнейшем идентификатор сайта используется для подключения шаблона, выбора новостей, определения языка и т.д.
Пример:
В настройках одного сайта указана папка /, другого /ru.
При открытии example.com/forum/messages/ попадаем на первый сайт, при открытии example.com/ru/forum/messages/ - на второй.
При этом папка bitrix (содержащая ядро продукта) лежит в корне, никуда не копируется и никакие другие настройки на сервере не делаются. Это всё понятно и просто.
Гораздо больше вопросов и проблем возникает с настройкой многосайтовости по второму способу, когда нам необходимо обслуживать одной установкой Битрикс несколько сайтов в разных доменах. Остановимся на этом подробнее.
Многосайтовость по второму способу (мини HOWTO)
Сначала нужно определиться, что мы хотим получить. Будем считать, что имеем два домена:
example.com
example.net
Они имеют разные корневые папки (т.е. при обращении к каждому из них открываются файлы из разных физических папок на сервере). Существует вариант, когда при обращении к любому домену открывается одна и та же папка на сервере (ниже рассмотрим такой вариант), но именно первый вариант является предпочтительным.
При этом хочу обратить внимание на следующие моменты:
- все домены должны указывать на один сервер, вариант, когда разные домены настроены на разных хостеров, неприемлем;
- в нашем случае (когда корневые папки доменов разные) не имеет значения, имеем мы разные домены второго уровня или поддомены одного домена (например, games.example.com и example.com). А если быть вернее, то это вообще не имеет значения. То что нас действительно должно интересовать: общая ли у них корневая папка или нет;
- вариант, когда настраивается большое число поддоменов, которые формируются динамически (например, vasya.example.com, kolya.example.com и т.д.) вообще не является многсайтовостью в контексте нашего продукта, и соответственно руководства многосайтовости сюда не применимы. Рассмотрим этот вариант ниже. Если говорить грубо, то многосайтовость Битрикса - когда настроено несколько сайтов в списке сайтов в настройках продукта.
Шаг за шагом.
1. Устанавливаем Битрикс на один из доменов (не важно, на какой). Для ясности считаем, что
2. Теперь необходимо заставить работать ту же копию на втором домене.
Считаем, что публичная часть у сайтов разная (иначе зачем нужны разные сайты?), поэтому для второго сайта потребуется только ядро продукта (папка bitrix, ну и upload). Теоретически, если их просто скопировать из первого сайта, то будет работать, но нас это не устроит (приходилось сталкиваться с такой "многосайтовостью").
Получим две копии ядра, которые работают с одной базой данных, после обновления одного из них обновится база данных, и второй сайт перестанет работать (ну и кроме того, копирование ядра противоречит лицензии).
Проблема решается использованием
Руководство по многосайтовости рекомендует выносить ядро в общую папку shared, затем делать символические ссылки в каждом сайте. Здесь для простоты изложения я упрощу этот шаг и сделаю ссылку с одного сайта на другой (с функциональной точки зрения разницы нет).
Набросал небольшой скрипт, который поможет создать символические ссылки при использовании только ftp доступа к серверу:
<html> <head><title>Создание ссылок на папки bitrix и upload</title></head> <body> <? error_reporting(E_ALL & ~E_NOTICE); @ini_set("display_errors",1); if ($_POST['path']) $path = rtrim($_POST['path'],"/\\"); else $path = '../site2/www'; if ($_POST['create']) { if (preg_match("#^/#",$path)) $full_path = $path; else $full_path = realpath($_SERVER['DOCUMENT_ROOT'].'/'.$path); if (file_exists($_SERVER['DOCUMENT_ROOT']."/bitrix")) $strError = "В текущей папке уже существует папка bitrix"; elseif (is_dir($full_path)) { if (is_dir($full_path."/bitrix")) { if (symlink($path."/bitrix",$_SERVER['DOCUMENT_ROOT']."/bitrix")) { if(symlink($path."/upload",$_SERVER['DOCUMENT_ROOT']."/upload")) echo "<font color=green>Символические ссылки удачно созданы</font>"; else $strError = 'Не удалось создать ссылку на папку upload, обратитесь к администратору сервера'; } else $strError = 'Не удалось создать ссылку на папку bitrix, обратитесь к администратору сервера'; } else $strError = 'Указанный путь не содержит папку bitrix'; } else $strError = 'Неверно указан путь или ошибка прав доступа'; if ($strError) echo '<font color=red>'.$strError.'</font><br>Исходный путь: '.$full_path; } ?> <form method=post> Путь к папке, содержащей папки bitrix и upload: <input name=path value="<?=htmlspecialchars($path)?>"><br> <input type=submit value='Создать' name=create> </form> |
Скрипт необходимо закачать в корневую папку второго сайта (в нашем случае, example.net), затем после запуска указать путь к корневой папке первого сайта (или папке shared, если ядро находится в ней).
Предположим, первый сайт находится в папке:
/var/www/denis/example.com/www
второй:
/var/www/denis/example.net/www
Записываем скрипт в папку /var/www/denis/example.net/www, в поле путь пишем "../../example.com/www" или "/var/www/denis/example.com/www". Если всё будет нормально, в папке /var/www/denis/example.net/www появятся нужные символические ссылки.
На этом этапе могут возникнуть проблемы:
- нет прав на запись в текущую папку;
- действует ограничение безопасности (open_basedir), которое не позволяет пользователям разделяемого хостинга обращаться к другим сайтам.
В случае возникновения проблем с этим скриптом следует обратиться за помощью к хостеру.
После того как ссылки созданы должно происходить следующее: набираем example.net/bitrix/admin, открывается панель авторизации, вводим данные администратора, которые указывали при установке продукта на example.com и попадаем в административную панель Битрикса.
Поскольку ядро одно и база одна - административная панель для обоих сайтов будет одинаковая (т.е. одна и та же).
Теперь надо скопировать с первого сайта .access.php (чтобы был доступ на чтение корневого раздела, при необходимости можно вручную отредактировать его, удалив всё кроме $PERM["/"]["*"]="R";) и index.php (который потом будет редактироваться).
3. Настройка сайтов.
Открываем настройки каждого сайта (Настройки - Настройки продукта - Сайты - Список сайтов), указываем в поле "Доменное имя:" example.com и example.net соответственно для первого и второго сайта.
Последнее, что надо здесь сделать - указать путь на сервере к корневой папке каждого сайта (поле "Путь к корневой папке веб-сервера для этого сайта:") для того чтобы модуль управления структурой построил дерево файлов каждого сайта (меню "Контент"):
указываем /var/www/denis/example.com/www и /var/www/denis/example.net/www соответственно.
4. Проверка публичной части.
Если всё было сделано правильно, сейчас на разных доменах должны открываться разные сайты. Для этого воспользуемся простейшим скриптом:
<?require($_SERVER['DOCUMENT_ROOT']."/bitrix/header.php");?> <? echo "SITE_ID = ".SITE_ID; ?> <?require($_SERVER['DOCUMENT_ROOT']."/bitrix/footer.php");?> |
Сохраним в корне обоих сайтов, при обращении к скрипту в домене example.com должен отобразиться идентификатор (двухбуквенное отображение) первого, в домене example.net - идентификатор второго сайта.
Всё. Задача решена.
А если общая корневая папка?
Это не удобно в первую очередь потому что публичная часть сайтов будет общая. Но если другого варианта нет, можно настроить многосайтовость и здесь. Только для разделения публичной части в корне сайта придётся создать папки для каждого сайта и фактически получится многосайтовость по первому способу.
Теперь коротко по шагам. Условия задачи прежние, но будем считать что домены example.com и example.net имеют одну корневую папку /var/www/denis/example
1. Ставим продукт в любом домене один раз.
2. Для разделения публичной части создаём в папке /var/www/denis/example папки com и net. Здесь ядро имеет путь /var/www/denis/example/bitrix для обоих сайтов, и символические ссылки создавать не требуется.
3. В настройках сайтов теперь помимо домена нужно указать папку сайта: /com и /net для первого и второго сайта.
4. Создаём индексную страницу сайта по примеру из учебного курса. Эта страница по домену будет определять текущий сайт и подключать соответствующую публичную часть. Только для этого надо было указать домены в настройках сайтов. Привожу здесь код скрипта:
<? // подключим файл с классом CMainPage require($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/mainpage.php"); // получим идентификатор текущего сайта по доменному имени $site_id = CMainPage::GetSiteByHost(); // получим абсолютный путь к индексной странице папки сайта $page = CMainPage::GetIncludeSitePage($site_id); // если сайт определен и определена индексная страница то if(strlen($site_id)>0 && strlen($page)>0) { // подключим страницу require_once($page); } else // иначе если сайт не определен то { require($_SERVER['DOCUMENT_ROOT']."/bitrix/header.php"); // далее можно разместить код который будет отображаться если // сайт ранее не был определен ?> <?require($_SERVER['DOCUMENT_ROOT']."/bitrix/footer.php"); } ?> |
Настройка завершена.
Много поддоменов на одном сайте
К примеру, на сайте пользователи после регистрации получают свой домен вида user.example.com. При обращении к такому домену хотим открывать блог пользователя.
1. Лучше всего в такой ситуации для всех поддоменов использовать отдельную от основной корневую папку сайта. Договариваемся с хостером, что для example.com открывается /var/www/denis/example.com, а для всех поддоменов (за исключением
2. Создаём символьные ссылки как описано выше для многосайтовости по второму способу, но никакую дополнительную настройку Битрикса (как указание доменов в настройке сайта) делать не требуется.
3. Создаём индексную страницу в папке /var/www/denis/blogs, размещаем на ней компонент bitrix:blog.blog. Обратите внимание, это не комплексный компонент блогов, а компонент, отображающий содержимое конкретного блога.
4. На этой же странице перед подключением компонента вставляем код, который будет определять текущий идентификатор блога на примере следующего:
<? if (!preg_match("#^www\.([^.]+)\.#",$_SERVER["HTTP_HOST"],$regs)) // если набрали с "www": www.user.example.com preg_match("#^([^.]+)\.#",$_SERVER["HTTP_HOST"],$regs); $BLOG_ID = $regs[1]; ?> |
Далее в параметрах компонента в качестве идентификатора блога указываем переменную $BLOG_ID. Всё должно работать.
Заключение
Получилось много текста, в действительности действий то совсем не много. Попытался осветить основные вопросы, которые возникают у клиентов по вопросам многосайтовости при обращении в техподдержку. Надеюсь, изложение поможет чуть лучше понять вопрос и решать проблемы используя эти знания.
Много нервов потратил перед обращением в суппорт, за то наигрался с движком вдоволь =)
Битрикс игнорирует HTML кеширование в многосайтовом режиме.
Так же рекомендую сии примечание добавить в админку битрикса
"Управление генерацией HTML страниц" в пояснения.
С толку сбивает отсутствие документации по данному вопросу.
например, вот такие домены
domen1.ru
domen2.ru
sub.domen2.ru
sub.domen2.ru
sub.domen3.ru
domen4.ru
domen5.ru
sub.domen6.ru
1 старая
2 новая
У каждого сайта свое url
Как заменить сайты?
Чтобы новая версия сайта была доступна по нужному адресу
Все сделал как у вас написано для решения многосайтовости на разных доменах.
Установил в папку home/site1.com/www первый сайт
во втором каталоге home/site2.com/www сделал канонические ссылки на папки bitrix и upload и туда же добавил файлы .access.php и index.php. Как результат открывается сайт один и тот же с разных доменов. Затем в админке пытаюсь добавить второй сайт и мне пишет ошибку:
Ошибка сохранения
Папка для установки решения не пуста
Можно ли такое сделать? Если да, то подскажите как это сделать наиболее правильно.
Есть основной сайт - site.ru и несколько языковых версий к нему: en.site.ru, ch.site.ru, fr.en.site.ru, it.site.ru, de.site.ru.
Имеются лицензии на все доп. сайты.
Все настроила по инструкции "Многосайтовость на разных доменах", думая что нет разницы в том что использовать: домен, или поддомен.
При просмотре доп сайтов, выдается меню, контент, и шаблон основного сайта, то есть битрикс не понимает, что я нахожусь на поддомене. Просмотрев документацию о многосайтовости поняла, что битрикс все поддомены относит автоматом к основному сайту, то есть до первой точки в урле.
Подскажите как настроить многосайтовость на поддоменах?
Либо это невозможно, и мне придется делать многосайтовость без поддоменов?
Проблема осталась
Обращение создано.
Спасибо
Но...
Есть проблемка. Может не в тему? Простите заранее,
Имеем Битрикс - версии Бизнес.
Настроен обмен заказами и товарами с 1С 8.
Создано 2 разных интернет-магазина для разных городов на двух разных доменах в пределах одного хостинга. папки bitrix и upload - общие для обеих магазинов, остальные папки на каждом домене свои.
В 1 С создана общая номенклатура, но товар оприходован и распределен по двум складам, соответственно для первого и второго сайтов. Все прекрасно выгружается, но заметил, что если один и тот же товар был на обеих складах, но потом на одном из складов закончился, то несмотря на отсутствие товара кнопка Купить активна. И даже удается купить этот товар, оформить заказ. При этом информация о наличии товара на складах в карточке товара (торговый каталог-склады) не меняется. Как было на этом складе 0, так и осталось ноль после оформления заказа, на втором складе тоже, как было 1 шт в наличии, так и осталось. Но не смотря на этот нулевой остаток товар купить удается один раз, второй раз пишет - нет в наличии, и также показывает нулевой остаток.
Все нормально работает, если одинаковый товар есть в наличии на обоих складах или на одном есть, а на другом никогда не было.
Заранее благодарен за любой намек.
делаешь на нормальном фреймворке типа zend - всегда все просто и понятно. Тут же ... такое ощущение, что вы издеваетесь.
Сделал все по инструкции, в принципе все работает, но на втором сайте шаблон идет в кодировке. Скажите как поправить?
Имеется сайт на поддомене (для нашей франшизы), например gorod1.set.ru. Доступ администратора от сайта gorod1.set.ru имеется.
НО теперь хотим сделать отдельный адрес себе, например, GOROD1-SET.RU. Т.е. хотим, чтобы тот же сайт что на gorod1.set.ru был и на GOROD1-SET.RU.
Вопрос вот в чем: можно ли как то сделать, чтобы мы на GOROD1-SET.RU было тоже самое что на gorod1.set.ru? и как это сделать?
Может какая то переадресация? Может как то склеить эти два адреса, но чтобы всё открывалось на GOROD1-SET.RU. Т.е. менять информацию будем на том сайте (gorod1.set.ru), и она сразу видна на сайте GOROD1-SET.RU.
Возможно ли это? и какой способ для этого подойдет?
2. Для разделения публичной части создать в папке /www/home178spb.ru папки com и net. Здесь ядро имеет путь www/home178.ru/bitrix для обоих сайтов, и тогда символические ссылки создавать не надо.
3. В настройках сайтов теперь помимо домена указать папку сайта: /com и /net для первого и второго сайта.
4. Создать индексную страницу сайта
Ситуация
На "Малом бизнесе" было создано два магазина
Store1.ru /основной домен/
Store2.ru
...далее так случилось что домен Store1.ru пришлось освободить (отвязали DNS)
теперь когда вся админка была завязана на store1.ru не работает полноценно (css и js адресуются в HEDER через Store1.ru/...)
Как быть?
Как Store2.ru сделать основным доменом?
/home/bitrix/www/
/home/bitrix/ext_www/site2.ru - в каталоге созданы символьные ссылки на ядро битрикса
все работало до недавнего времени. сейчас выпадает второй сайт в ошибку forbidden 403
помещаю просто php скрипт или HTML - работает:!:
оказывается срабатывает защита хостов: Настройки - Проактивная защита - Хосты/домены.
еще можно тут
работает.
НО
в админке пытаюсь создать новый шаблон сайта например второго залогинившись именно в его домен.
при нажатии на Сохранить или применить просто все заполненные поля очищаются и ничего не создаётся.
если зайти именно в первый сайт где ядро натурально а не ссылками сделано - там всё ок под тем же пользователем с правами админа.
это весьма неудобно потому что с шаблонами работать должны будут разные люди в разных филиалах, каждый со своим сайтом.
з.ы. при нажатии кнопки Просмотреть в редакторе шаблонов ругаеться мол не могу создать файлы хидер футер и сиэсэс соответственные.
где засада не могу понять.
ззы всё решилось, оказалось что владелец папок с ядром не тот что указан в доппараметрах IIS во втором сайте - учетные данные на доступ к файлам
В моем случае редакция БИТРИКС "БИЗНЕС"
Музыкальный магазин
На сайте реализована система оплаты и прочие вещи относящиеся к интернет-магазину.
Необходимо создать второй проект, который полностью будет отличаться от первого.
Как будет выглядеть ситуация с шаблонами писем, оплатой заказов, фильтром товаров.
Вообще получится все это развести для второго подобного проекта без косяков???
Собственно хотелось бы создать на базе одной оси ДРУГОЙ ИНТЕРНЕТ МАГАЗИН.
Или все это костыли????
Настроила все по инструкции. Символьные ссылки созданы. В админке основного сайта вижу файли обоих сайтов.
Но когда открываем второй сайт, идет редирект на первый.
Техподдержка не знает, как решить этот вопрос, говорит, что виноват хостер. Хостер говорит, что виноват битрикс.
В результате вопрос не решается.
Помогите, пожалуйста, кто сталкивался с подобной ситуацией.
Последний отображает индексную страницу не текущей директории, созданную отдельной для поддоменов, а индексную страницу корневой директории самого сайта, где физически расположен bitrix.
Может кто сталкивался с такой ситуацией, подскажите пожалуйста как можно решить эту проблему?
Выложил на
1. Скопировал сайт на поддомен test.example.ru
2. Создал новую базу и привязал ее к test.example.ru
3. Отключил example.ru и оставил включенным test.example.ru. Первый отрубился, второй остался работать. Все правильно.
4. Открываю test.example.ru, вижу сбитую верстку. Через браузер смотрю ссылки на css-файлы, вижу что ссылаются на папку с кэшем, лежащую не в test.example.ru, а в example.ru.
5. Здесь (Настройки => Настройки продукта => Сайты => Список сайтов)
- В полях "Доменное имя:" и "URL сервера", поменял c example.ru на test.example.ru.
- В поле "Путь к корневой папке веб-сервера для этого сайта:", нажал на кнопку "вставить текущий".
6. Здесь (Настройки => Настройки продукта => Настройки модулей => Главный модуль), в поле "URL сайта" поменял c example.ru на test.example.ru
Результата нет. Сайт по прежнему со сбитой версткой, а ссылки на ссs-файлы по прежнему ссылаются на основной сайт.
7. Есть странная особенность. Будто бы сайты работают взаимосвязано. Видно это если в браузере в котором, открыта админка test.example.ru, сайт example.ru, тоже отображается. Но если сайт example.ru открыть в другом браузере. Видно, что он закрыт для публичного пользования, как я и делал в пункте №3.
Помогите разобраться.
Cannot redeclare CheckFilterDates() (previously declared in /home/bitrix/shared/bitrix/modules/main/filter_tools.php:10) (0)
/home/bitrix/www/bitrix/modules/main/filter_tools.php:10
----------
</pre> удаляем симлики возвращаем папки назад все начинает работать. наша версия Проект работает на основе "1С-Битрикс: Управление сайтом 22.600.100"