Записки

Многосайтовость на разных доменах Битрикс 03.04.2020

Многосайтовость на разных доменах Битрикс

Использование многосайтовости на разных доменах так же позволяет исключить из URL-ов на сайте лишние подкаталоги /s1/ или /s2/ и начинать формирование URL адресов прямо от каталога "/". То есть адреса сайтов будут иметь вид:

http://www.example.ru/
http://www.example.com/

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

Многосайтовость на разных доменах – это название технологии создания сайтов, при которой ядро продукта устанавливается в папку одного из сайтов, а для остальных сайтов настраиваются символьные ссылки (симлинки). Эту технологию можно реализовать и на разных доменах (как в примере выше), и на поддоменах.

Настройка многосайтовости на разных доменах

Каждый сайт надо разместить в соответствующем каталоге, например:
  • /home/www/site1/
  • /home/www/site2/

Установка продукта и настройка символьных ссылок

Продукт устанавливается в один из сайтов. Чтобы ядро могло работать для обоих сайтов, необходимо создать символьные ссылки для сайта, в котором нет установленного ядра. Ссылки потребуются для папок /bitrix, /local и /upload. Эти папки являются общими для обоих сайтов, такова особенность архитектуры.

Символьная ссылка: (также симлинк от англ. Symbolic link, символическая ссылка) - cпециальный файл, для которого в файловой системе не хранится никакой информации, кроме одной текстовой строки. Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данной ссылке.

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

Предварительная настройка в административной панели

Первый сайт мы установили, или он у нас уже заранее установлен и работает. Теперь заходим в административную панель первого сайта: Настройки > Настройки продукта > Сайты > Список сайтов.

В строке первого сайта (www.site1.com), в колонке действий выбираем команду Изменить и указываем в них:
  •  Название: site1
  • Доменное имя: site1.com
  • Папка сайта: /
  • Название сайта: Корпоративный сайт компании "Название компании"
  • URL сервера: www.site1.com
  • Путь к корневой папке веб-сервера для этого сайта: /home/www/site1/
Если DNS настроен таким образом, что ваш сайт отвечает на адрес http://site1.com, то в поле Доменное имя желательно указывать без www. Можно перечислить в этом поле с новой строки любое число доменных имен, по которым вы хотите, чтобы отвечал сайт (или уже отвечает).

Далее создаём второй сайт s2

Многосайтовость на разных доменах

Аналогично настроим параметры второго сайта (www.site2.com/):
  •  Название: site2
  • Доменное имя: site2.com
  • Папка сайта: /
  • Название сайта: Интернет-магазин компании "Название компании"
  • URL сервера: www.site2.com
  • Путь к корневой папке веб-сервера для этого сайта: /home/www/site2/
Обратите внимание, что для двух сайтов в параметре Папка сайта указано одинаковое значение: "/". Это связано с тем, что сайты обслуживаются разными "виртуальными серверами" (в терминологии Apache) у которых для размещения файлов использован разный каталог.
Также необходимо обратить внимание на параметр Путь к корневой папке веб-сервера для этого сайта. Для разных сайтов у него свое значение, взятое из параметра DocumentRoot настроек соответствующего "виртуального сервера".

Примечание:
Необходимо иметь в виду, что при организации многосайтовости по данному способу, вы можете использовать как виртуальные сервера одной установки Apache, так и просто разные установки Apache. Это справедливо для других веб-серверов: IIS, EServ и т.д.

А теперь самое интересное!

Создаём второй сайт на хостинге и в корневую папку этого сайта (/home/www/site2/) помещаем скрипт, представленный ниже, под любым именем, например symlink.php:

<html>
<head><title>Создание ссылок на папки bitrix, local и upload</title></head>
<body>
<?
error_reporting(E_ALL & ~E_NOTICE);
@ini_set("display_errors",1);

if ($_POST['path'])
   $path = rtrim($_POST['path'],"/\\");
else
   $path = '../site1/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"))
             {
               if (symlink($path."/local",$_SERVER['DOCUMENT_ROOT']."/local"))
                  echo "Символические ссылки удачно созданы";
               else
               $strError = 'Не удалось создать ссылку на папку local, обратитесь к администратору сервера';
              }
           else
           $strError = 'Не удалось создать ссылку на папку upload, обратитесь к администратору сервера';
          }
          else
          $strError = 'Не удалось создать ссылку на папку bitrix, обратитесь к администратору сервера';          
      }
      else
         $strError = 'Указанный путь не содержит папку bitrix';
   }
   else
      $strError = 'Неверно указан путь или ошибка прав доступа';
  
   if ($strError)
      echo ''.$strError.'
Исходный путь: '.$full_path;
}
?>
<form method=post>
Путь к папке, содержащей папки bitrix, local и upload: <input name=path  value="<?=htmlspecialchars($path)?>"><br>
<input type=submit value='Создать' name=create>
</form>
</body>
</html>


Открываем браузер и в адресной строке указываем  http://site2.com/symlink.php и нажимаем "Enter".
В открывшимся окне прописываем путь к корневой папке первого сайта s1, в нашем случае /home/www/site1/.

После того как символьные ссылки созданы, наберите в адресной строке браузера http://site1/bitrix/admin. Откроется панель авторизации.
Введите данные администратора, которые указывали при установке продукта на первый сайт, и попадете в административную панель «1С-Битрикс: Управление сайтом».

На этапе создания могут возникнуть проблемы:
1. отсутствия прав на запись в текущую папку;
2. ограничение безопасности (open_basedir), которое не позволяет пользователям разделяемого хостинга обращаться к другим сайтам.

В случае возникновения проблем с этим скриптом следует обратиться за помощью к хостеру.

Важно!

При создании второго сайта необходимо скопировать с основного сайта или заново создать файлы /.htaccess и /404.php.

Создайте файл .access.php c таким содержанием в корне второго сайта:

<? $PERM["/"]["*"]="R"; ?>

Вход в систему

Наберите в адресной строке браузера http://site1/bitrix/admin (или http://site2/bitrix/admin). Откроется панель авторизации.
Вводите данные администратора, которые указывали при установке продукта на первый сайт и попадете в административную панель "1С-Битрикс: Управление сайтом".
Поскольку ядро одно и база одна - административная панель для обоих сайтов будет одинаковая.

Возврат к списку