Мультирегиональность на одном сайте с www
Рассмотрим задачу создания мультирегиональности на нескольких доменах/поддомендах и поддиректориях
Есть 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ия будет единой на
- www.site.ru
- sohi.site.ru
- www.site.ru/tula/
Для piter.ru - будет таже сессия только для авторизованных пользователей, для не авторизованных сессия будет иная.
Настройка DNS
Настройки 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)
- Распространять авторизацию на все домены (только для https)

Включение https
Чтобы сайт всегда работал на https протоколе, и ссылки формировались с защищеным протоколом, необходимо включить это. Для это проверяем чтобы в файле /bitrix/.settings.php была запись
<?php
return array (
//какие то записи
"https_request" => array(
"value" => true
),
);
?>
Если нету - нужно добавить

Файл .htaccess
В файл .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

Регионы без дирректорий (префиксов)
Для регионов без дирректорий заполнение такое же. За исключением того, что поле
Использовать по умолчанию- НетПрефикс директории- должно быть пусто.

Регион для www.site.ru/tula
Регионы с поддиректриями имеют важное отличие. Для такого региона в корне сайта должна быть папка с соответствующим название - 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(),
),

Результат
В итоге должно получиться примерно следующее
