GeoIP 4.0

Мультирегиональность на одном сайте с 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
Awww178.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 и piter.ru, такая запись подразумевает и поддомены. Это важно для доступности сессии пользователя между поддоменами.

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

2023-11-15_21-14.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

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

2023-11-05_17-40.png

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

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

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

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

2023-11-15_21-16.png

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

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

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

2023-11-05_17-53.png

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

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

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

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

2023-11-05_18-03.png

В остальном настройки похожие 2023-11-15_21-19.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-32.gif