13  /  28

Псевдомногосайтовость на разных доменах

Просмотров: 41691
Дата последнего изменения: 02.07.2020
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5

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

Первый вариант

Многосайтовость реализуется в этом случае за счет кода индексной страницы основного сайта.

Но в случае ошибочных указаний адресов возможны ситуации, когда, например, будет отображен контент одного сайта в шаблоне другого.

Настройка сервера Apache

Настройка сервера производится аналогично настройкам многосайтовости на одном домене.

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

Настройки сайтов производятся аналогично настройкам многосайтовости на одном домене с той лишь разницей что в поле Доменное имя каждого сайта указываются собственные доменные имена для каждого сайта.

Настройка индексной страницы

Посетитель каждого из сайтов, заходя по адресу http://www.site1.com или http://www.site2.com, попадает фактически на страницу /index.php, лежащую в каталоге, указанном в параметре DocumentRoot настроек веб-сервера. В многосайтовой конфигурации роль этого файла немного меняется, и в нем необходимо разместить уже не содержимое индексной страницы корня одного из сайтов, а PHP код, осуществляющий выбор одного из сайтов в зависимости от текущего доменного имени.

При решении данной задачи могут быть использованы следующие функции класса CMainPage:

  • CMainPage::GetSiteByHost - возвращает ID сайта, определяя его по текущему доменному имени.
  • CMainPage::GetSiteByAcceptLanguage - возвращает ID сайта, определяя его по переменной Accept-Language в настройках браузера пользователя.
  • CMainPage::GetIncludeSitePage - возвращает абсолютный путь на индексную страницу папки указанного сайта, для дальнейшего его подключения.
  • CMainPage::RedirectToSite - перенаправляет на индексную страницу папки указанного сайта.

Пример индексной страницы портала, когда сайт определяется по текущему доменному имени

Пример индексной страницы портала, когда сайт определяется по установленным в браузере посетителя языкам

Пример индексной страницы портала, когда один из сайтов расположен в корне, остальные - в папках, но при этом хосты у сайтов одинаковые

Второй вариант

Если домены и дизайны двух сайтов разные, и используется одна база для двух сайтов (настройки магазина и т.д. тоже одинаковые), можно использовать такой вариант. Лицензия на второй сайт при этом не используется.

Решение:

  1. Перейдите в Настройки сайта (Рабочий стол > Настройки > Настройки продукта > Сайты > Список сайтов)
  2. Установите для первого шаблона Тип условия = Выражение PHP. В условие пишите:
    strpos($_SERVER["HTTP_HOST"], 'domain1.ru')!==false
  3. Установите для второго шаблона Тип условия = Выражение PHP. В условие пишите:
    strpos($_SERVER["HTTP_HOST"], 'domain2.ru')!==false
  4. В поле Доменное имя: (список доменных имен, каждое в новой строке) - прописываете оба домена.

Настройка сервера производится аналогично настройкам многосайтовости на одном домене.


25
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии