Рассмотрим задачу создания мультирегиональности на нескольких доменах/поддомендах и поддиректориях
Есть 2 домена, 1 поддомен, 1 поддиректория
www.site.ru
- для основного региона, используемого по умолчаниюsohi.site.ru
- отдельный регион для Сочиwww.site.ru/tula/
- отдельный регион для Тулыpiter.ru
- отдельный регион для Санкт-ПетербургаIP адрес сервера - 178.154.224.133
В данном случае используется основной основной домен 3-го уровня, то есть www.site.ru
и домены регионов тоже 3го уровня, например sohi.site.ru
В этом случае как для авторизованных так и не авторизованных пользователей сесcия будет единой на
Для piter.ru
- будет таже сессия только для авторизованных пользователей, для не авторизованных сессия будет иная.
Настройки DNS будут содержать как минимум такие записи
site.ru:
Тип | Хост | Значение |
---|---|---|
A | @ | 178.154.224.133 |
A | www | 178.154.224.133 |
A | sohi | 178.154.224.133 |
piter.ru:
Тип | Хост | Значение |
---|---|---|
A | @ | 178.154.224.133 |
Теперь необходимо настроить параметры сайта в битриксе. Переходим на на страницу со списком сайтов, в меню строки с нужным сайтов нажмите на пункт - Изменить
Рабочий стол / Настройки / Настройки продукта / Сайты / Список сайтов
/bitrix/admin/site_admin.php?lang=ru
В форме заполните поля
Доменное имя
URL сервера
E-Mail адрес по умолчанию
Указать нужно
site.ru
иpiter.ru
, такая запись подразумевает и поддомены. Это важно для доступности сессии пользователя между поддоменами.
В идеале должно получиться примерно как на картинке ниже.
Сохраните изменения.
В настройках главного модуля необходимо включить
Чтобы сайт всегда работал на https протоколе, и ссылки формировались с защищеным протоколом, необходимо включить это. Для это проверяем чтобы в файле /bitrix/.settings.php
была запись
<?php
return array (
//какие то записи
"https_request" => array(
"value" => true
),
);
?>
Если нету - нужно добавить
В файл .htaccess
в корне сайта добавьте строки проверяющие поддомен. В таком случае пользователь обязательно будет либо на www.site.ru
либо соответствующему региону sohi.site.ru
RewriteCond %{HTTP_HOST} !^www.site.ru [NC]
RewriteCond %{HTTP_HOST} !^sohi.site.ru [NC]
RewriteCond %{HTTP_HOST} !^piter.ru [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
Важно указывать именно !^www.site.ru
, а не !^www.site.ru$
, так как иногда хост может передаваться как www.site.ru:80
, в результате могут быть ошибки при работе сайта и лишние редиректы, в том числе цикличные
Домены в зоне .рф
должны быть сконвертированы в Punycode
.
Например сочи.сайт.рф
-> xn--h1aliz.xn--80aswg.xn--p1ai
Перекодировать можно например здесь
Настало время настроить регионы. Переходим на страницу списка регионов и добавляем новые.
Рабочий стол / BXmaker / GeoIP 4.0 / Региональность / Регионы
/bitrix/admin/bxmaker.geoip_region_list.php?lang=ru
Далее заполняем каждый регион исходя из задачи.
В первую очередь добавляем регион используемый по умолчанию для всех местоположений, который будет использоваться с основным доменом www.site.ru
. Нужно заполнить, как минимум, эти поля:
Активность
- ДаИспользовать по умолчанию
- ДаНазвание
- Любое названиеОсновное местоположение
- МоскваДомен
- в текущем случае это будет www.site.ruДля регионов без дирректорий заполнение такое же. За исключением того, что поле
Использовать по умолчанию
- НетПрефикс директории
- должно быть пусто. Регионы с поддиректриями имеют важное отличие. Для такого региона в корне сайта должна быть папка с соответствующим название - tula
. Внутри должна быть точно такая же структура как и в корне сайта.
Когда пользователь находясь в каталоге сменит свое местоположение на Тулу, произойдет редирект на туже страницу, только в пути добавится поддиректория:
Если структура будет отличаться и не будет настроенной верно, вполне вероятно, что после смены города пользователь увидит 404 ошибку.
В остальном настройки похожие
Если вам необходимо выводить разные цены и/или склады в каталоге, тогда нужно сделать следующее:
Отредактируем файлы - /catalog/index.php и /tula/catalog/index.php
и добавим в конце списка параметров вызова компонента переопределение на свои значения
"PRICE_CODE" => (array)\BXmaker\GeoIP\Manager::getInstance()->getPosition()?->getRegion()?->getPriceCodes(),
"STORES" => (array)\BXmaker\GeoIP\Manager::getInstance()->getPosition()?->getRegion()?->getStores(),
"LIST_PROPERTY_CODE" => array(
0 => "NEWPRODUCT",
1 => "SALELEADER",
2 => "SPECIALOFFER",
3 => "REGION_ID_". \BXmaker\GeoIP\Manager::getInstance()->getPosition()?->getRegion()?->getId(),
),
"DETAIL_PROPERTY_CODE" => array(
0 => "NEWPRODUCT",
1 => "MANUFACTURER",
2 => "MATERIAL",
3 => "REGION_ID_". \BXmaker\GeoIP\Manager::getInstance()->getPosition()?->getRegion()?->getId(),
),
В итоге должно получиться примерно следующее