GeoIP 4.0

Мультирегиональность на одном сайте без 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
Asohi178.154.224.133

piter.ru:

ТипХостЗначение
A@178.154.224.133

Настройки сайта

Теперь необходимо настроить параметры сайта в битриксе. Переходим на на страницу со списком сайтов, в меню строки с нужным сайтов нажмите на пункт - Изменить

Рабочий стол / Настройки / Настройки продукта / Сайты / Список сайтов

/bitrix/admin/site_admin.php?lang=ru

2023-11-05_17-26.png

В форме заполните поля:

  • Доменное имя - нужно оставить пустым
  • URL сервера
  • E-Mail адрес по умолчанию

Если указать в доменном имени site.ru, битркис будет устанавливать куки для поддоменов.site.ru. В результате сессия будет стартовать заново и работа сайта будет нарушена -

  • страница может постоянно перезагружаться
  • авторизация может не сохраняться
  • и тп.

В идеале должно получиться примерно как на картинке ниже.

2023-11-06_20-34.png

Сохраните изменения.

Настройки главного модуля

В случае если в настройках сайта не указаны Доменные имена, как в нашем случае, необходимо в настройках главного модуля необходимо включить

  • Распространять куки на все домены (только для https)
  • Распространять авторизацию на все домены (только для https)

2023-11-06_20-56.png

Включение https

Чтобы сайт всегда работал на https протоколе, и ссылки формировались с защищеным протоколом, необходимо включить это. Для это проверяем чтобы в файле /bitrix/.settings.php была запись

<?php
return array (
//какие то записи
"https_request" => array(
      "value" => true
 ),
);
?>

Если нету - нужно добавить

2023-11-15_21-40.png

Регионы

Настало время настроить регионы. Переходим на страницу списка регионов и добавляем новые.

Рабочий стол / BXmaker / GeoIP 4.0 / Региональность / Регионы

/bitrix/admin/bxmaker.geoip_region_list.php?lang=ru

2023-11-05_17-40.png

Далее заполняем каждый регион исходя из задачи.

Регион по умолчанию

В первую очередь добавляем регион используемый по умолчанию для всех местоположений, который будет использоваться с основным доменом site.ru. Нужно заполнить, как минимум, эти поля:

  • Активность - Да
  • Использовать по умолчанию - Да
  • Название - Любое название
  • Основное местоположение - Москва
  • Домен - в текущем случае это будет site.ru

2023-11-05_17-42.png

Регионы без дирректорий (префиксов)

Для регионов без дирректорий заполнение такое же. За исключением того, что поле

  • Использовать по умолчанию - Нет
  • Префикс директории - должно быть пусто.

2023-11-05_17-53.png

Регион для site.ru/tula

Регионы с поддиректриями имеют важное отличие. Для такого региона в корне сайта должна быть папка с соответствующим название - tula. Внутри должна быть точно такая же структура как и в корне сайта.

Когда пользователь находясь в каталоге сменит свое местоположение на Тулу, произойдет редирект на туже страницу, только в пути добавится поддиректория:

Если структура будет отличаться и не будет настроенной верно, вполне вероятно, что после смены города пользователь увидит 404 ошибку.

2023-11-05_18-03.png

В остальном настройки похожие 2023-11-05_18-05.png

Разные Цены, Склады и тд

Если вам необходимо выводить разные цены и/или склады в каталоге, тогда нужно сделать следующее:

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

Отредактируем файлы - /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(),
),

2023-11-05_18-11.png

Результат

В итоге должно получиться примерно следующее Peek 2023-11-15 21-52.gif