1С-Битрикс Разработчикам – Многосайтовость на пальцах

1с-битрикс разработчикам – многосайтовость на пальцах

Очень много информации на нашем сайте по настройке многосайтовости, но эта тема почему-то всегда вызывает много вопросов. Хотя на мой взгляд здесь всё довольно просто.

Ну начнём с того, что на одной установке Битрикса можно сделать много сайтов (без покупки

можно сделать два сайта), а значит закроем первый вопрос: для настройки многосайтовости надо установить Битрикс

только один раз

.

Есть довольно подробный  

, где описывается два способа настройки многосайтовости.

[spoiler]
Какой способ выбрать?

Существует мнение, что пользователь выбирает для себя сам удобный способ многосайтовости, однако в действительности выбор способа зависит от настроек системы.
Первый способ предполагает (на папках), что сайты находятся в одном домене, но в разных папках. Он годится для создания сайтов на разных языках или, например, региональных сайтов одной компании.
Адреса сайтов будут иметь вид:


или

Если тематика сайтов разная, видимо, не обойтись без настройки второго способа, когда разные сайты находятся в разных доменах, пример:


Оба сайта работают на одной копии продукта, но внешне это никак не проявляется. Это выглядит привлекательнее, но требует чуть больше усилий для настройки.
Особо хочу обратить внимание, что далее речь идёт о работе на хостинге, когда все настройки сервера делает администратор. Если вы настраиваете многосайтовость локально, необходимо предварительно настроить виртуальные веб сервера. Можно посмотреть об этом на Apache (и в русской части Интернета море статей на эту тему).

Теперь несколько слов о том, как система определяет текущий сайт.
Откроем настройки сайта (Настройки – Настройки продукта – Сайты – Список сайтов):
Настройки многосайтовости

Здесь можно указать доменное имя и папку сайта – это основные параметры настройки многосайтовости, остальные определяют приоритеты.
Сначала система проверяет текущий домен: из настроек всех сайтов выбираются домены и сопоставляются с доменом на котором находится пользователь. При этом сравнивается только правая часть до точки (т.е. все поддомены автоматически относятся к этому домену). Например, в настройках указано
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 и т.д.) вообще не является многсайтовостью в контексте нашего продукта, и соответственно руководства многосайтовости сюда не применимы. Рассмотрим этот вариант ниже. Если говорить грубо, то многосайтовость Битрикса – когда настроено несколько сайтов в списке сайтов в настройках продукта.

Задача: настроить многосайтовость по второму способу на UNIX-хостинге.

Шаг за шагом.

1. Устанавливаем Битрикс на один из доменов (не важно, на какой). Для ясности считаем, что продукт на example.com. Пока никакие дополнительные настройки не делаем.

2. Теперь необходимо заставить работать ту же копию на втором домене.
Считаем, что публичная часть у сайтов разная (иначе зачем нужны разные сайты?), поэтому для второго сайта потребуется только ядро продукта (папка bitrix, ну и upload). Теоретически, если их просто скопировать из первого сайта, то будет работать, но нас это не устроит (приходилось сталкиваться с такой “многосайтовостью”).
Получим две копии ядра, которые работают с одной базой данных, после обновления одного из них обновится база данных, и второй сайт перестанет работать (ну и кроме того, копирование ядра противоречит лицензии).
Проблема решается использованием . Если говорить образно, ссылка выполняет задачу ярлыка на рабочем столе, который открывает программу, но сам программой не является.
Руководство по многосайтовости рекомендует выносить ядро в общую папку shared, затем делать символические ссылки в каждом сайте. Здесь для простоты изложения я упрощу этот шаг и сделаю ссылку с одного сайта на другой (с функциональной точки зрения разницы нет).
Набросал небольшой скрипт, который поможет создать символические ссылки при использовании только ftp доступа к серверу:

Скрипт необходимо закачать в корневую папку второго сайта (в нашем случае, 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. Проверка публичной части.

Если всё было сделано правильно, сейчас на разных доменах должны открываться разные сайты. Для этого воспользуемся простейшим скриптом:

Сохраним в корне обоих сайтов, при обращении к скрипту в домене

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. Создаём индексную страницу сайта по примеру из учебного курса. Эта страница по домену будет определять текущий сайт и подключать соответствующую публичную часть. Только для этого надо было указать домены в настройках сайтов. Привожу здесь код скрипта:

Настройка завершена.

Много поддоменов на одном сайте

К примеру, на сайте пользователи после регистрации получают свой домен вида user.example.com. При обращении к такому домену хотим открывать блог пользователя.

1. Лучше всего в такой ситуации для всех поддоменов использовать отдельную от основной корневую папку сайта. Договариваемся с хостером, что для example.com открывается /var/www/denis/example.com, а для всех поддоменов (за исключением ) корневой папкой является /var/www/denis/blogs. Ставим Битрикс на example.com.

2. Создаём символьные ссылки как описано выше для многосайтовости по второму способу, но никакую дополнительную настройку Битрикса (как указание доменов в настройке сайта) делать не требуется.

3. Создаём индексную страницу в папке /var/www/denis/blogs, размещаем на ней компонент bitrix:blog.blog. Обратите внимание, это не комплексный компонент блогов, а компонент, отображающий содержимое конкретного блога.

4. На этой же странице перед подключением компонента вставляем код, который будет определять текущий идентификатор блога на примере следующего:

Далее в параметрах компонента в качестве идентификатора блога указываем переменную $BLOG_ID. Всё должно работать.

Заключение

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

Виртуальная машина bitrix

В BitrixVM добавляются два сайта.

Делегирование доменов

В примере курса был отредактирован файл hosts.

Задачи многосайтовости

  • Разработка сайта с несколькими языковыми версиями
  • Разработка мобильного сайта
  • Разработка дополнительных сайтов подразделений и филиалов компании
  • Разработка сайта интернет магазина и его представительства

Инфоблоки

В настройках инфоблока имеется привязка к сайту

Настройка

В настройках сайта (настройки продукта -> сайты -> список сайтов) установить следующие параметры для сайтов s1 и s2:

  • id
  • название
  • папка сайта (для s1 ‘/’ или ‘/s1/’)
  • название веб сайта
  • url сервера (одинаковые)

Настройка сайтов

В папку первого сайта установить битрикс. Затем в папке второго сайта делаются симлинки на папку bitrix и upload первого сайта.

ln -s /home/bitrix/ext_www/site_one/bitrix /home/bitrix/ext_www/site_twoln -s /home/bitrix/ext_www/site_one/upload /home/bitrix/ext_www/site_two

Скопировать на второй сайт файлы:

  • access.php
  • .htaccess
  • 404.php
  • index.php

У сайтов указываются следующие настройки:

  • название
  • доменное имя
  • папка сайта
  • название веб сайта
  • url сервера
  • путь к корневой папке веб сервера

Особенности

  • Одно доменное имя
  • Отдельный каталог для дополнительного сайта

Перенос авторизации

В настройках главного модуля установить чекбокс распространять авторизацию на все домены (на вкладке авторизация).

Принцип

  • Отдельное доменное имя для дополнительного сайта
  • Отдельный веб-сервер для дополнительного сайта

Псевдомногосайтовость

1) Создается поддомен.
2) В настройках сайта указывается данное доменное имя.
3) На индексной странице размещается код:

Серверные настройки

  • настройка веб сервера
  • делегирование доменов
Похожее:  Настраиваем социальные сервисы Битрикс

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *