Ну начнём с того, что на одной установке Битрикса можно сделать много сайтов (без покупки
Есть довольно подробный
[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. Всё должно работать.
Заключение
Получилось много текста, в действительности действий то совсем не много. Попытался осветить основные вопросы, которые возникают у клиентов по вопросам многосайтовости при обращении в техподдержку. Надеюсь, изложение поможет чуть лучше понять вопрос и решать проблемы используя эти знания.
записал в файл .htaccess обоих сайтов строчку SetEnv BX_PERSONAL_ROOT /bitrix_personal
создал в обоих сайтах папку /bitrix_personal/ и сделал туда символьные ссылки на php_interface и на templates
В итоге пока на сайте не зарегестрирован показывает так же некорректно как я написал в самом начале, а если зарегестрироваться выдает ошибку:
[CODE]Fatal error: Class 'CSticker' not found in C:\xampp\htdocs\shared\bitrix\modules\fileman\fileman.php on line 179[/CODE]
Уже не знаю куда копать, подскажите пожалуйста.
При настройки конфига Апача в руководстве Битрикса сказано что надо вставить следующее для каждого сайта:
<VirtualHost *:80>
ServerAdmin admin@site1.com
DocumentRoot "/home/www/site1/"
ServerName site1.com
ServerAlias *.site1.com
ErrorLog logs/site1.log
CustomLog logs/site1.log common
</VirtualHost>
но переменная ServerAlias по инструкции Apacha должна стоять сразу после <VirtualHost *:80>, а не после ServerName - в общем поменял местами и всё заработало. Вот как просто.
Не нашел в документации такого указания. Более того, в примере на странице
Очевидно, ошибка была все же в чем-то другом.
Warning: require(/home/c/cl57847/korsar-eg/public_html/bitrix/header.php) [
Fatal error: require() [
Не получается настроить мультидоменность по второму способу. Мои действия6
1. Создала папку для нового сайта all-alarma.ru при помощи ftp. Дала на нее права 750. Расположила рядом с папкой текущего сайта. Структура папок:
2. В административной части Настройки - Настройки продукта - Сайты - Список сайтоа создала второй сайт.
Настройки существующего сайта
Настройки только что созданного сайта
Сайт второй пустой.
3. Создание символических ссылок. В корень второго сайта поместила файл symbol.php с содержимым, приведенным вами выше. Переменная: $path = '. ./hikvision-cctv.ru/docs';
Вопрос. Как мне теперь запустить этот скрипт? Ведь сайта all-alarma.ru фактически нет. Там вообще ничего нет, кроме созданного только что скрипта. Или я упустила какой-то момент?
Оттачиваю "мастерство" локально, дабы потом все скинуть на хостинг в готовом виде.
В выше данном скрипте поменял site2/www на ... скажем xxx2/www.
Правда, у меня выглядит как "/" и "/xxx2" (*Папка сайта: / и соответственно *Папка сайта:/xxx2, "Путь к корневой папке веб-сервера для этого сайта: пусто")
Скрипт кинул соответственно в www/xxx2, запустил, вроде как все прошло, но выдало
"В текущей папке уже существует папка bitrix
Исходный путь: Путь к папке, содержащей папки bitrix и upload: "
Подскажите, что нужно и как вписать в окно - "Путь к папке, содержащей папки bitrix и upload:" чтобы все встало наконец-то?
Заранее спасибо
вроде бы вопрос был затронут, но остались вопросы по настройке.Суть. есть сайт уже работающий на битриксе. обычная визитка компании.
Пока он работает на демо версии битриксабыл разработан интернет - магазин этой же компании.
Теперь стоит задача объединить все это дело под лицензией многосайтовости, да еще и переехать при этом на новый хост так как старого не хватает.
Правильно ли я понимаю,что это нужно осуществить следующим образом.
1.Скопировать разработанные скрипты и шаблон интернет-магазина куда-то себе.
2.Выгрузить резервную копию работающего сайта на новый хостинг.
3.Создать новый шаблон, скопировать скрипты инет магазина.
4.Настроить многосайтовость по схеме 2?
При этом встанет ли резервная копия на новый хостинг? или при этом надо будет отключить сайт на старом хостинге? Просто ведь для настройки многосайтовости естественно нужен установленный битрикс, а устанавливать пустой а затем делать на нем два сайта нецелесообразно, поэтому и спрашиваю про резервную копию.
Большое спасибо, за будущий ответ и мои извинения за корявость описания ситуации.
И скрипт должен быть .php файлом. Файл скрипта положить в корень сайта (например файл назвал 123.php) вызывать его надо через адресную строку example.net/123.php
Умные возможно это и так знали, но есть и такие как я ).
у меня два сайта site.ru и shop.site.ru.
Сделал все по второму способу, без проблем создались символические ссылки, перетащил и отредактировал файл .access.php
но при проверке, как советовалось
Сортировку для подсайта надо ставить меньше, чем у дефолтного
Нужно сделать многосайтность на разных доменах. Когда подключаюсь по фтп то коренная папка сайта /public_html и на нее есть уже папка с символическойй ссылкой на папку www. как мне разместить папки и shared,upload.
/www/ тут допустим должен быть сайт s1
/www/site2/
Подскажите пожалуйста по такой ситуации.
У меня два сайта, с разными доменами. Проблема в том что у них одинаковая индексная страничка, плюс у второго сайта главное меню берется от первого сайта.
Посоветуйте как можно решить данную проблему?
В поле - Путь к корневой папке веб-сервера для этого сайта:
прописано следующее
1 сайт - /home/u01655/site1/html/
2 сайт - /home/u01655/site1/site2/
В поле - Путь к папке: у обоих указан "/"
Правильно ли прописаны пути?
Not Found
The requested URL /catalog/furniture/bedrooms/frame_2_bunk_beds_2/ was not found on this server.
Все статические страницы демо магазина работают нормально. В чем может быть косяк?
Кто-нибудь может помочь новичку настроить многосайтовость на локальном компьютере? Редакция "Малый бизнес" установлена в D:\Bitrix Environment. Желательно по шагам. По инструкции
на сайте настроена многосайтовость на разных доменов (2 корневые папки, 2 сайта)
Нужно сделать резервное копирование для переноса на другой сервер.
Выбираем: Настройки Инструменты Резервное копирование (вкладка расширенные), ставим галку Архивировать публичную часть, ниже предлагает выбрать один из 2 сайтов, однако мне нужна публичка обоих...
как решить?
Я понимаю конечно, что главное "впарить", но нельзя же так.
а нет ли рецепта для windows хостинга? (на нем не работает функция simlink() )
Конфигурация такая:
Все делается на локалке. Сервер - Денвер
/home/site.com/www/site1
/home/site.com/www/site2
Папки bitrix и upload лежат в /home/site.com/www/site1
С помощью скрипта для создания символьных ссылок, эти
ссылки были успешно созданы в /home/site.com/www/site2
Далее должно быть это:
Сервер выдает что нет прав на доступ:
Forbidden
You don't have permission to access /bitrix/admin/ on this server.
Подскажите, где нужно подправить права?
Имеется два магазина с пересекающейся номенклатурой: "Магазин А" - товары А; "Магазин Б" - товары А и Б.
Структура каталога из-за этого несколько различается. Необходимо, также, облегчить контентменеджмент и учет остатков, чтобы текст и фото добавлять один раз и при заказе списание происходило с одного места.
Возможно ли в многосайтовости Битрикса добавлять разные категории товаров и сами товары с частичным разбросом их на оба сайта и частичным на раздельные?
Спасибо!