Мультирегиональность на одном сайте без www
Рассмотрим задачу создания мультирегиональности на нескольких доменах/поддомендах и поддиректориях
Есть 2 домена, 1 поддомен, 1 поддиректория
site.ru- для основного региона, используемого по умолчаниюsohi.site.ru- отдельный регион для Сочиsite.ru/tula/- отдельный регион для Тулыpiter.ru- отдельный регион для Санкт-Петербурга
IP адрес сервера - 178.154.224.133
Особенности
В данном случае особенность в том, что основной домен 2го уровня, то есть site.ru а не www.site.ru из-за этого есть важные особенности работы сессий.
- Для авторизованных пользователей сессия будет единой для всех поддоменов
- Для НЕ авторизованных пользователей сессия будет отдельная для каждого поддомена/домена
Настройка DNS
Настройки DNS будут содержать как минимум такие записи
site.ru:
| Тип | Хост | Значение |
|---|---|---|
| A | @ | 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, битркис будет устанавливать куки для поддоменов.site.ru. В результате сессия будет стартовать заново и работа сайта будет нарушена -
- страница может постоянно перезагружаться
- авторизация может не сохраняться
- и тп.
В идеале должно получиться примерно как на картинке ниже.

Сохраните изменения.
Настройки главного модуля
В случае если в настройках сайта не указаны Доменные имена, как в нашем случае, необходимо в настройках главного модуля необходимо включить
- Распространять куки на все домены (только для https)
- Распространять авторизацию на все домены (только для https)

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

Регионы
Настало время настроить регионы. Переходим на страницу списка регионов и добавляем новые.
Рабочий стол / BXmaker / GeoIP 4.0 / Региональность / Регионы
/bitrix/admin/bxmaker.geoip_region_list.php?lang=ru

Далее заполняем каждый регион исходя из задачи.
Регион по умолчанию
В первую очередь добавляем регион используемый по умолчанию для всех местоположений, который будет использоваться с основным доменом site.ru. Нужно заполнить, как минимум, эти поля:
Активность- ДаИспользовать по умолчанию- ДаНазвание- Любое названиеОсновное местоположение- МоскваДомен- в текущем случае это будет site.ru

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

Регион для site.ru/tula
Регионы с поддиректриями имеют важное отличие. Для такого региона в корне сайта должна быть папка с соответствующим название - tula. Внутри должна быть точно такая же структура как и в корне сайта.
Когда пользователь находясь в каталоге сменит свое местоположение на Тулу, произойдет редирект на туже страницу, только в пути добавится поддиректория:
Если структура будет отличаться и не будет настроенной верно, вполне вероятно, что после смены города пользователь увидит 404 ошибку.
Важно! Все ссылки в скопированных файлах меню, статичных страниц должны быть скорректированы. Парамтеры компонентов также нужно скорректировать - например для компонента катлога нужно указать параметр
SEF_FOLDER => /tula/catalog/

В остальном настройки похожие

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

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