Создание мультисайта на MODX REVO

Лучше поздно, чем никогда. Как и обещал https://modx.pro/help/5194/ пишу про создание мультисайта на MODX REVO. Выкладываю в блог Готовые решения, т.к. в статье есть чуть-чуть кода.

Смысл всей затеи — упростить поддержку сайтов.

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

Кроме того, для упрощения работы необходимо внедрить стандарты, чтобы упростить рутину. Звучит громко, но на самом деле все просто — по «узким» моментам единожды принимаем какое-то решение и дальше просто поступаем по образцу, чтобы не тратить время на изобретение велосипедов. По принятому решению пишем короткую заметку в Евернот, чтобы потом когда понадобится можно было быстро найти, на чем основывалось решение.

В таких «стандартах» у меня:
— ресайз картинок с примерами кода
— настройки галереи fancybox с примерами кода
— создание файловых архивов
— названия чанков, например почти везде у меня есть чанки HEADER.site1, FOOTER.site1, ASIDE.site1 (в названии используем название контекста).
— и т.д. и т.п.

Т.е. единожды продумываем тонкости и решаем, что будем делать именно так и никак иначе. В дальнейшем это позволит избежать бардака и существенно ускорит процесс переноса существующих сайтов в мультисайт или разработку новых сайтов.


Плюсы и особенности «мультисайта»:
  • у админа единый интерфейс управления всеми сайтами
  • модераторы заходят в админки своих сайтов по своим адресам, т.е. site1.ru/manager/, site2.ru/manager/ и т.д. и со своей настроенной админкой
  • похожий интерфейс бекэнда у все сайтов, т.е. можно отвечать на вопросы модераторов и сеошников просто по памяти без компьютера и интернета под рукой.
  • меньше времени на обновление программного обеспечения сайтов, т.к. один раз для мультисайта, а не для каждого отдельно.
  • во время переноса, некоторые сайты были переверстаны на bootstrap, соответственно потом, в случае доработок сильно экономим на верстке + сайт получается адаптированным для смартфонов (гугль утверждает, что это важно).
Недостатки «мультисайта», или то, на что «сходу» не нашел решения, может быть кто-то подскажет:
  • в редакторе TinyMCE при вставке гиперссылки из редактора отображаются/ищутся все ресурсы мультисайта, т.е. но ограничивается текущим контекстом.
  • не нашел как спрятать шаблоны не относящиеся к текущему контексту.
Как оказалось, самое сложное в мультисайте — перенести контент. На текущий момент до сих пор не все сайты перенесены. Потому-что, раз «уж взялись», и чтобы «два раза не вставать», то и реорганизовать контент, исправить какие-то ошибки (смысловые, интерфейсные, юзабилити, грамматические, SEO и т.д. и т.п.), отказаться от «форума» в пользу «тикетов», подправить верстку, уменьшить количество сущностей (шаблонов, чанков и т.д.). А это все происходит долго.

Важный момент, на который нужно обратить внимание по каждому сайту:
Не навредить SEO! Поскольку «вылететь» из поисковой выдачи Яндекса и Гугла — это плохо. Один из сайтов «вылетел», пришлось в срочном порядке восстанавливать все адреса + дополнительно настраивать контекстную рекламу, поскольку у владельца сайта это был основной канал коммуникации с клиентами.

Про мультисайты на modx не так много статей, когда я все это задумал, мне казалось, что или все слишком очевидно или просто особо этим никто не занимается.
При поиске через гугль нашел это:
_http://www.wiseguydigital.com/blog/2010/how-to-build-multi-site-modx-installations
_http://modx.ws/blog/uroki-modx-revolution/multisajt-na-modx-revolution.html
_http://www.belafontecode.com/modx-revolution-hosting-multiple-domains/

— в статьях описано примерно одно и тоже.

Как сделал я:

1. Сайты на виртуальном сервере, все домены ссылаются в одну папку, таким образом прекрасно работает плагин от Василия Наумкина bezumkin.ru/sections/tips_and_tricks/2439/, который переадресует каждый домен на свой контекст.
upd. Переадресация идет, если имя домена совпадает с настройкой контекста http_host.



2. Соответственно для каждого домена сделан отдельный контекст. В настройках контекста прописаны обязательные настройки:
site_start – ID главной страницы сайта (этот параметр написан ввиде цифры в скобках в конце каждого документа в меню Resources)
base_url – установите этот параметр “/” (без кавычек)
http_host – укажите в этом параметре домен вашего дополнительного сайта “имя.ru” (если речь идет о домейне третьего уровня, то в этом параметре необходимо указать имя.имя.ru)
site_url – укажите в этом параметре полный адрес вашего дополнительного сайта “http://имя.ru/” (можете указать с www)
— без них работать не будет.

Плюс все нужные индивидуальные настройки для каждого домена, напрмер «страница 404», «статус сайта», «использовать вложенные url». И настройки почты. Я чаще всего использую ЯндексПочту для домена, все прекрасно работает. Для каждого домена задаем отдельные почтовые ящики.

3. По настройке htaccess с «www» и «без www» создал топик в разделе Работа modx.pro/work/5786-configure-htaccess-to-multisite/. Помог Василий Наумкин.
Те записи, которые есть в примере файла htaccess дистрибутива modx для доменов и с «www» и «без www» не работают, сайт пишет про циклическую ошибку (комент Ильи Уткина в вышеуказанном топике про работу).

Для сайтов «с www» нужно прописать отдельное правило для этого сайта. А там, где ниже идёт правило для редиректа всех www на без-www нужно добавить условие не редиректить тот сайт.

Итого:

# Редирект site1.ru -> www.site1.ru
RewriteCond %{HTTP_HOST}    ^site1.ru\.ru [NC]
RewriteRule ^/?(.*)         http://www.site1.ru/$1 [R=301,L]
 
# Редирект всех остальных www -> non-www, кроме site1.ru
RewriteCond %{HTTP_HOST}    !^www\.site1\.ru [NC]
RewriteCond %{HTTP_HOST}    ^www\.(.*)$ [NC]
RewriteRule ^(.*)$          http://%1/$1 [R=301,L]

4. Сделал отдельный каталог со спецдиректориями по названию доменов для их индивидуальных файлов, изображений, шаблонов и т.д.




Путь от корня мультисайта индивидуально папки получился «s/site1/», «s/site2/» и т.д. для каждого сайта. В эти папки положил важные для SEO подпапки от каждого сайта, например:
«s/site1/assets/image»
«s/site1/assets/gallery»
«s/site1/assets/files»
«s/site1/assets/cashe»

Папки image, gallery, files и т.д. — из Modx Evo, там хранится проиндексированный поисковиками контент, но для того, чтобы этот контент открывался по прежнему адресу нужно из url убрать адрес спецдиректории для каждого домена, например «s/site1/».

5. Для того, чтобы вырезать из URL пути «s/site1/», «s/site2/» Василий Наумкин написал плагин и привел пример записи в htacess.

<?php
if ($modx->event->name != 'OnWebPagePrerender') {continue;}
$urlCut = $modx->getOption('urlCut');
if (empty($urlCut)) {
    return;
}
$urls = array_map('trim', explode(',', $urlCut));

foreach ($urls as $url) {
    $modx->resource->_output = preg_replace("#(/|){$url}#i", '/', $modx->resource->_output);
}

Он работает для всех контекстов и берёт список вырезаемых url из настройки контекст urlCut. Т.е. если надо вырезать кусок из url «s/site1/», то в настройках контекста добавляем запись «urlCut».




Затем нужно научить Apache2 загружать такие файлы из спецдиректории, прописываем в htaccess:

# Работаем только для site1 и только для ненайденных файлов c указанными расширениями
RewriteCond %{HTTP_HOST}    ^www\.site1\.ru [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
RewriteRule ^(.+)\.(png|gif|jpg|jpeg|xls|doc|pdf)$ /s/med55/$0 [L,NC]

Соответственно для каждого домена нужно прописать похожее правило.

Мы сохранили прежние пути к проиндексированным в поисковых системах файлам, хотя физически она находятся в отдельных спецдиректориях. Таким образом не вредим SEO.

Для примера, картинка у нас физически находится по адресу:
site1.ru/s/site1/assets/image/image.jpg

Но открывается она по URL
site1.ru/assets/image/image.jpg

Т.е. после добавления сайта в мультисайт адреса изображений остались прежними.

По специфичным моментам настройки каждого отдельного домена в мультисайте вроде все.

Тонкости:

Я создал один контекст для образца, со всеми индивидуальными настройками которые мне нужны для каждого домена и потом просто копировал его, чтобы каждый раз не прописывать отдельные настройки для каждого контекста. Кроме того в этом образцовом контексте созданы ресурсы 404, sitemap и т.д., они тоже копируются при копировании контекста — это удобно.

Для переноса, в мультисайте настраивается тестовый домен, контент существующего сайта переносился «вручную». После того, как все перенесли и убедились, что все ок, в настройках контекста меняли имя домена на нужное и только потом переадресовывали домен на папку мультисайта.

Настройка прав и админки для юзеров с урезанными правами — стандартная, никаких особенностей, связанных с мультисайтом там нет. Просто настраиваем нужный доступ к контексту и юзер открывает админку по адресу его сайта «site1/manager/» и в дереве ресурсов отображается только его контекст.

Для каждого отдельного контекста создана отдельная категория, соответственно все чанки, шаблоны, доп.поля, плагины складываем туда, чтобы «не в одну кучу». При необходимости, для удобства разработки, можно настроить отдельного юзера с доступом в эту категорию, чтобы другие категории не мешались. Я так не делал, поскольку во многих случаях просто копировал код с «соседнего» сайта, например чанк вывода новости со всеми прописанными полями (заголовок и длинный заголовок, ресайз картинок, альты и тайтлы к картинке, вывод дат и т.д.). Это и упрощает разработку и позволяет не забыть важные моменты, т.е. не надо каждый раз вспоминать «что же нужно прописать».

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

Настроил ежедневный бэкап сайта по крону. Но своим клиентам раз в две недели автоматически рассылаю письма, что «создан полный бэкап сайта».

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




Стандартные компоненты, сниппеты и плагины прекрасно работают в мультисайте.
Для настройки меню сайта от корня достаточно указать необходимый контекст [[pdoMenu? &context=`site1`]]

Выводы:
Вставлять в мультисайт какие-то сложные сайты (интернет-магазины и т.д.) наверно не стоит.

Но что-то проще:
— лендинги;
— сайты без какого-либо сложного функционала, например сайт организации с лентой новостей, каталогом товаров и услуг — можно и по временным затратам встроить в мультисайт проще чем создать отдельный новый сайт + сильно экономим время на обслуживании.

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

Наверняка я что-то упустил, если есть какие-то вопросы, спрашивайте.
Иван Чуваев
06 июля 2015, 02:48
modx.pro
41
21 519
+9

Комментарии: 104

Василий Столейков
06 июля 2015, 14:22
0
А если есть несколько однотипных, но мультиязычных сайтов, где языки находятся в подпапках /ru/, /en/?
Как бы вы организовали работу с несколькими мультиязычными сайтами в одной админке?
    Иван Чуваев
    06 июля 2015, 15:48
    0
    Ссылку в топике https://bezumkin.ru/sections/tips_and_tricks/2439/ смотрели?
    Первый пример там как раз для /ru/, /en/.
    Мультиязычный сайт у меня всего один, на там все тупо — просто отдельные ресурсы с отдельными шаблонами и контентом на английском языке — просто переведенный каталог товаров. И шапке сайта ссылки «ru»|«en». Ну т.е. нет никакого автоматического выбора по языку браузера и т.д.
      brioni
      02 февраля 2016, 22:05
      0
      А можно делать всё тоже самое только без новых доменов?
      Т е создать каталог, а выводить его как отдельный сайт.
      Александр Москвин
      02 февраля 2016, 15:36
      0
      lux-line.ru/ — сайт 3 версии

      банально сниппетом
      [[!swland?
      &ru=`русская`
      &en=`английская`
      &cn=`китайская`
      ]]

      $url=explode('/', $_SERVER[REQUEST_URI]);
      $ru = !empty($ru)? $ru: '';
      $en = !empty($en)? $en: '';
      $cn = !empty($cn)? $cn: '';
      $land=$url[1];
      if($land=='en'){
      return $en;
      }else if($land=='cn'){
      return $cn;
      }else{
      return $ru;
      }
      Сергей Росоловский
      06 июля 2015, 22:17
      0
      Зачем Апач? я думал им уже не пользуются.
        Василий Наумкин
        07 июля 2015, 05:34
        0
        Очень много где пользуются, особенно на shared хостингах. Да и на VPS панели управления, типа ISP Manager, под него заточены.

        Гораздо проще дать человеку .htaccess, чем объяснять, что такое Nginx и как писать для него правила.
        Перетягин Илья
        07 июля 2015, 01:27
        0
        Спасибо за проделанную работу!
          yani
          08 июля 2015, 12:19
          0
          в редакторе TinyMCE при вставке гиперссылки из редактора отображаются/ищутся все ресурсы мультисайта, т.е. но ограничивается текущим контекстом.
          не нашел как спрятать шаблоны не относящиеся к текущему контексту.
          мне кажется эти параметры придется хардкорно править в «ядре»
          я например меняла сортировку шаблонов в выпадающем списке
          Павел
          16 июля 2015, 13:13
          0
          А как на счет быстродействия? если почистить кеш то он почистится у всех сайтов сразу
            Иван Чуваев
            16 июля 2015, 14:49
            0
            Отдельные сайты в мультисайте относительно небольшие — до 1000 страниц со всеми новостями. Сервер довольно мощный. Кэш картинок при сбросе общего кэша сайта не сбрасывается. Я тормозов не замечаю.
              Василий Наумкин
              16 июля 2015, 16:32
              0
              Моё мнение на этот счёт однозначное — сайт не должен жить за счёт кэша.

              При очистке на modx.pro, первый раз главная грузится так:
              total time: 2.2554 s
              query time: 0.4618 s
              queries: 233
              
              Потом вот так:
              total time: 0.3539 s
              query time: 0.0480 s
              queries: 137
              

              То есть, очистки кэша никто не замечает — как это и должно быть.
              max
              max
              01 сентября 2015, 13:19
              0
              Добрый день! Мне как раз необходимо переустановить SEO-цели на мультисайте. Вижу такую картину:
              onclick="yaCounter[[++[[*context_key]].yaKey]].reachGoal('something'); return true;"
              При попытке изменения содержимого, оно меняется сразу на 2 сайтах, что не есть хорошо. Если не сложно, можете направить меня на путь решения данного вопроса(где именно мне искать поле для ввода СЕО-цели под конкретный сайт)? Спасибо.
                Илья Уткин
                01 сентября 2015, 14:42
                0
                Скорее всего, в настройках каждого контекста.
                  Илья Уткин
                  01 сентября 2015, 14:42
                  0
                  А, нет, похоже, разработчик не знал, что так можно. Так что ищите в настройках системы
                    max
                    max
                    01 сентября 2015, 15:56
                    0
                    ничего не нашел такого, что могло бы помочь(
                  Василий Столейков
                  02 сентября 2015, 08:07
                  +1
                  Если я правильно понял вопрос...
                  Как вариант: вывести весь код в отдельные чанки, а вместо кода прописать [[$ya.[[++context_key]]]]. Чанки соответственно будут называться по ключу контекстов, например [[$ya.ru]], [[$ya.en]]
                  После этого меняешь содержимое только нужного чанка и код меняется только на нужном сайте.
                    max
                    max
                    02 сентября 2015, 13:35
                    0
                    спасибо за информацию) попробую
                  миха86
                  16 сентября 2015, 13:19
                  0
                  Установил modx по адресу d1.com, настроил контексты, сделал d2.com алиасом d1.com, прикрутил плагин, вбиваю d2 — перебрасывает на d1. Где может быть ошибка?
                  Сергей
                  28 декабря 2015, 00:07
                  0
                  Добрый вечер!
                  Получилось ли у кого-нибудь сделать авторизацию у каждого контекста по его же site_url?
                  site1.site.ru/manager
                  site2.site.ru/manager
                  site3.site.ru/manager
                  Выдает ошибку 404

                  Работает только site.ru/manager… можно авторизоваться по основному url… но хотелось бы по другому решить…

                  Комментирование строчки не помогло:
                  if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr') {return;}
                    Владимир
                    28 декабря 2015, 02:35
                    0
                    На всех сайтах (у меня) админка доступна по siteNN.site.tld/manager/, т.е. с любого поддомена.
                    Проверяйте настройки контекстов.
                      Сергей
                      30 декабря 2015, 02:01
                      0
                      base_url - /
                      default_context - site1.site.ru
                      default_media_source - 8
                      default_template - 5
                      http_host - site1.site.ru
                      site_name - Название сайта site1.site.ru
                      site_start - 2
                      site_url - http://site1.site.ru
                      Плагин взят от сюда bezumkin.ru/sections/tips_and_tricks/2439/ (второй для поддоменов). На сайте site1.site.ru скопированы с основного — .htaccess config.core.php index.php

                      Самое, что интересное — всё работает, каждый контекст (сайт) загружается, все страницы работают…

                      Но, при попытке зайти в админку — выдает 404 ошибку…

                      Может дело в том, что у меня основной сайт лежит по адресу site.ru? а не site.site.ru?
                      Вы можете написать основные настройки Ваши или как у вас устроено… видимо какая-то мелочь не пропускает это дело…

                      В логах это — site1.site.ru: 127.0.0.1 [30/Dec/2015:01:56:35 +0300] «GET /mngredu HTTP/1.1» 404 171 "-" «Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0»

                      Спасибо!
                        Владимир
                        30 декабря 2015, 02:04
                        1
                        0
                        base_url — /
                        уберите оттуда site1.site.ru
                        или вы опечатались, а затем исправили? (в письме мне пришло несколько иное)

                        В своем профиле добавьте возможность оправки личных сообщений
                          Сергей
                          30 декабря 2015, 02:17
                          0
                          На самом деле base_url поставил site1.site.ru, чтобы если зайдешь с админки site.ru, чтобы при клике «Перейти на сайт»… попадать не на site.ru а на site1.site.ru

                          Но куча глюков вылезла, например права урезаны только до Content Manager и если нажать на иконку «страничка» — создать ресурс — почему-то работает в контексте web… и пишет ошибку доступа… (пытался добавить настройку — default_context — site1.site.ru, неудачно (( )

                          После этого понял, что по-любому нужно открывать админку по адресу — site1.site.ru/manager
                          А так фиг знает, может версии слишком новые или еще какая-нибудь ерунда… тыкаешься во всё подряд и никак не заработает…

                          Профиль открыл для сообщений
                            Сергей
                            31 декабря 2015, 21:36
                            +1
                            Всё получилось. Нужно на хостинге/сервере направить все нужные домены на одну папку… а не создавать для каждого сайта папку в отдельности.
                            Спасибо!
                    Андрей
                    22 января 2016, 22:30
                    0
                    Я создал один контекст для образца, со всеми индивидуальными настройками которые мне нужны для каждого домена и потом просто копировал его, чтобы каждый раз не прописывать отдельные настройки для каждого контекста. Кроме того в этом образцовом контексте созданы ресурсы 404, sitemap и т.д., они тоже копируются при копировании контекста — это удобно.
                    Скажите, а если сейчас есть контекст web — как контекст основного сайта — его можно просто скопировать создав новый контекст или нужно все материалы переносить (создавать заново) в новом контексте?
                      Иван Чуваев
                      23 января 2016, 10:44
                      +1
                      Скопировать контекст web можно, ресурсы тоже копируются в новый контекст.
                      Копируем контекст в дереве ресурсов:


                      Далее:


                      Он скопирует все ресурсы в контектсе.
                        Андрей
                        23 января 2016, 10:51
                        0
                        Спасибо большое!
                          Андрей
                          24 января 2016, 11:32
                          0
                          И еще возник вопрос — при создании мультисайта для каждого домена (сайта) нужна же своя база данных и свои файлы или сто-то общее из этого. Подскажите пожалуйста по подробнее именно по структуре (файлы, БД).
                            Иван Чуваев
                            24 января 2016, 11:58
                            0
                            База у меня одна на всех.
                            Для модераторов каждого отдельного сайта настроены доступы к источникам файлов.
                              Андрей
                              24 января 2016, 12:50
                              0
                              А сайты получаются однотипной тематики или в принципе это разные сайты просто заведены в одну админку? Просто немного по БД не вкуриваю — или там без разницы — от нескольких разных сайтов хранить информацию или от одного — все делится по контекстам?
                        Андрей
                        24 января 2016, 20:40
                        0
                        Сделал мультисайт на поддоменах. Основной сайт лежит по адресу site.ru, второй сайт по адресу site1.site.ru. Создал второй контекст путем копирования первого (web), настроил у него необходимые параметры. Перенес в папку site.site.ru три файла: index.php, .htaccess, config.core.php
                        Но в результате получил 2 проблемы:
                        1. Не все стили подгружаются, потому как они стучаться по адресу например site.site.ru/css? а физически лежат по адресу site.ru/css Это можно конечно решить путем прописывания абсолютных путей, но это не решение ввиду того, что почти во всех устанавливаемых компонентах будет такая беда. И править вечно пути нет желания — хочется все упросить дом максимума.
                        2. Не получается зайти в админку — оно и понятно — в папке site.site.ru ее нет.

                        Подскажите мне по структуре файлов — не совсем понял, как нужно создать структуру. Говорят все в одну папку закинуть, какие файлы нужно переносить, подскажите плиз.
                          Воеводский Михаил
                          24 января 2016, 21:24
                          +1
                          Не нужно ничего никуда переносить. Используй плагин переключения контекстов bezumkin.ru/sections/tips_and_tricks/2439/
                            Андрей
                            24 января 2016, 21:43
                            0
                            А в таком случае у меня папка site.site.ru пустая. В админке есть плагин на событие OnHandleRequest.
                            При переходе по адресу site.site.ru выдает 403 ошибку.
                              Воеводский Михаил
                              24 января 2016, 21:44
                              0
                              Тебе вообще не нужна папка site.site.ru. Все домены должны вести на основной каталог сайта.
                                Андрей
                                24 января 2016, 21:46
                                0
                                Так вот я это и пытаюсь сделать, но не пойму где я не прав
                                  Воеводский Михаил
                                  24 января 2016, 21:47
                                  0
                                  Настройку доменов необходимо производить в панели управления хостингом.
                                    Андрей
                                    24 января 2016, 21:52
                                    0
                                    Ладно. Ответа я не дождался. Всегда все полунамеками пишется, вместо того, чтобы один раз написать по-человечески ответ на вопрос. все наверное с рулем в руках родились…
                                      Воеводский Михаил
                                      24 января 2016, 21:55
                                      0
                                      В моих ответов полунамеков нет. Как правильно, вопросы задают для получения направления. Я направление вполне ясно обозначил.

                                      Если что-то осталось непонятно, формулируй вопросы точнее и полнее. Я не телепат, чтобы догадываться, что же на самом деле требуется и в чем сложность.
                                        Андрей
                                        24 января 2016, 22:02
                                        0
                                        Есть основной домен site.ru
                                        Есть поддомен site1.site.ru
                                        папка поддомена у меня пустая, как я понял туда переносить никакие файлы не надо. Но при переходе по адресу поддомена вылетает 403 ошибка. Плагин для переключения контекстов есть. второй контекст называется site1.
                                        base_url /
                                         ---
                                        http_host
                                        site1.site.ru
                                        — 
                                        site_start
                                        26
                                        —
                                        site_url
                                        http://site1.site.ru/
                                        Вы говорите, что нужно настроить так, чтобы site1.site.ru ссылался на папку site.ru? И делается это на хостинге. А как — подскажите, какие настройки нужно трогать?
                                          Воеводский Михаил
                                          24 января 2016, 22:15
                                          0
                                          Страница с 403 ошибкой — серверная? На ней есть упоминание nginx или apache? Если да, направляй домен на основной каталог сайта — я писал об этом выше.
                                            Андрей
                                            24 января 2016, 22:39
                                            0
                                            Это нужно положить в site1.site.ru .htaccess и в нем 301 редирект? Но тогда в адресной строке будет адрес site.ru
                                            Воеводский Михаил
                                            24 января 2016, 22:40
                                            0
                                            Нет. Непосредственно поддомен должен быть направлен на каталог основного сайта. Если не понимаешь, как изменить настройки в панели управления хостингом, обратись в поддержку хостинга.
                                            Андрей
                                            26 января 2016, 19:56
                                            0
                                            Обратился я к хостингу — там до сих пор не могут решить вопрос. На хостинге ISP Manager. Подскажите, как сделать так, чтобы поддомен направлялся на папку основного домена?
                                            На данный момент они сделали так — при обращении к site1.site.ru он переадресовывается на site.ru/site1/ и в строке браузера этот адрес стоит — что не совсем так, как хотелось бы. Хотелось бы чтобы адрес в строке браузера оставался site1.site.ru
                                            Воеводский Михаил
                                            27 января 2016, 01:30
                                            0
                                            По ISP ничего не вспомню.
                                            Пиши доступ на почту, подумаем дальше.
                                            but1head
                                            27 января 2016, 03:16
                                            0
                                            Пути на isp настройте, или в менджили в конфиге. Просто вручную нужно выставть папку var/www/user/www/site.ru, обычно там такие пути. Ну или через профиль напишите
                                            Андрей
                                            28 января 2016, 10:42
                                            0
                                            Выставил путь к папке для поддомена, но в итоге получается просто релирект на нее. То есть вбиваю в админке site1.site.ru а переходит он на site.ru/site1/ Хостинг говорит, что где-то помимо него есть редирект, но где?
                                            brioni
                                            02 февраля 2016, 14:56
                                            0
                                            Удалось победить мультисайтовость?
                                            Если да, то сколько времени занял процесс со всей шелухой и настройками?
                                            Андрей
                                            02 февраля 2016, 18:20
                                            0
                                            Пока нет. Не победил. Но проблема у меня в настройках хостинга. Так что с нормальным хостингом все пройдет быстро и гладко. Все займет несколько минут.
                                            brioni
                                            02 февраля 2016, 18:37
                                            0
                                            Например Beget, подойдет?

                                            P.S. Ай как не хочется уйти в безконечный марафон…
                                            Андрей
                                            02 февраля 2016, 18:42
                                            0
                                            Да, с Бегетом проблем быть не должно.
                                            brioni
                                            03 февраля 2016, 17:27
                                            0
                                            С Бегетом пока фара, однако ниже дали конкретный ответ на вопрос о «Как заставить домен ссылаться в одну папку». Возможно тебе поможет:
                                            /etc/apache2/apache2.conf
                                            для каждого домена добавлена запись:
                                            <VirtualHost ip адрес моего сервера:81 >
                                                    ServerName домен_каждого_отдельного_сайта.ru
                                            	DocumentRoot /var/www/мойосновнойдомен.ru/data/www/мойосновнойдомен.ru
                                            </VirtualHost>
                                            Но подходит это только для виртуального хостинга. Написал в ТП Бегет с примером кода — жду ответа, как проделать тоже самое но обычном хостинге.
                                            Воеводский Михаил
                                            03 февраля 2016, 20:11
                                            0
                                            Для виртуального хостинга это вообще не поможет, ибо редактировать основной конфиг веб-сервера никто никогда не позволит.
                                            Андрей
                                            04 февраля 2016, 15:11
                                            0
                                            Вроде бы поборол я свою проблему. С помощью хостинга — там нашелся таки толковый специалист, который сразу понял что нужно сделать.
                                            Но теперь проблема такого плана.
                                            На сайте не отображаются картинки товаров minshop2
                                            Возможно, нужно прописать как то пути в настройках контекста для minishop 2?
                                            Кто подскажет в чем дело?
                                            brioni
                                            04 февраля 2016, 17:51
                                            0
                                            Расскажи как заставил ссылаться новые домены в одну папку через хостера?
                                            Был у тебя авто-редидект с нового домена на основной при открытии страниц нового домена?
                                            Если да, тот как отключить такую переадресацию?
                                            Андрей
                                            04 февраля 2016, 18:25
                                            0
                                            У меня панель ISP Manager.
                                            Для основного домена есть настройка автоподдомены — ее нужно было отключить.
                                            Далее я создал папку внутри основного домена. Вернее, я сделал одну папку, а внутри нее уже папку по имени поддомена. Чтобы было потом легче ориентироваться, для какого домена где лежат файлы.
                                            Далее я в настройках основного домена указал псевдоним вида *.site.ru
                                            Самое интересное что поддомен я при этом вообще не создавал. И по этому моменту у меня еще есть вопросы к хостеру.
                                            Далее я прописал в DNS-настройках A запись * = IP сервера

                                            P.S. Переадрессация была у меня сначала с поддомена на папку внутри основного сайта. Хостер сказал что она настроена была в htaccess
                                            Могу уточнить что именно он изменил там.
                                            brioni
                                            04 февраля 2016, 18:34
                                            0
                                            Да, узнай, пожалуйста про переадресацию в htaccess.
                                            И про это:
                                            Для основного домена есть настройка автоподдомены — ее нужно было отключить.
                                            можно подробнее.
                                            Андрей
                                            04 февраля 2016, 18:54
                                            0
                                            Для основного домена есть настройка автоподдомены — ее нужно было отключить.
                                            В ISP есть 2 вида настроек автоподдоменов — в папке основного сайта и в отдельной папке.
                                            У меня сначала стояла настройка — в папке основного сайта. А хостер сказал вообще отключить автоподдомены.
                                            brioni
                                            04 февраля 2016, 19:03
                                            0
                                            Ясно.
                                            Походу у меня вообще другая пляска.
                                            Странно, что при очевидных плюсах и выгодах мультисата на Modx, созданная ветка обсуждений такая сухая и равнодушная…
                                            Андрей
                                            04 февраля 2016, 19:42
                                            0
                                            Странно, что при очевидных плюсах и выгодах мультисата на Modx, созданная ветка обсуждений такая сухая и равнодушная…
                                            Может только у нас такие заморочки? ))) У всех поди работает все с первого раза))
                        brioni
                        03 февраля 2016, 14:50
                        0
                        Сори, если ответы очевидны, но эти детали требуют уточнения:
                        Переадресация идет, если имя домена совпадает с именем контекста.
                        То есть у нового контекста задаем: ключ — site.ru; имя — site.ru Включая ".ru"?
                        Сайты на виртуальном сервере, все домены ссылаются в одну папку
                        Это тоже самое, что в разделе «Управление доменами» хостинга Бегет выбрать «Направить домен на существующую директорию»?
                          Иван Чуваев
                          03 февраля 2016, 16:11
                          +1
                          у меня просто в файле конфига апача
                          /etc/apache2/apache2.conf
                          для каждого домена добавлена запись:
                          <VirtualHost ip адрес моего сервера:81 >
                                  ServerName домен_каждого_отдельного_сайта.ru
                          	DocumentRoot /var/www/мойосновнойдомен.ru/data/www/мойосновнойдомен.ru
                          </VirtualHost>
                          при этом DocumentRoot каждого отдельного сайта как раз ссылается на папку основного домена.

                          Переадресация идет, если имя домена совпадает с именем контекста.
                          — здесь я наврал, имя домена должно совпадать с параметром http_host в настройках контекста


                          т.е. плагин bezumkin.ru/sections/tips_and_tricks/2439/ сравнивает имя домена с настройкой контекста http_host
                            brioni
                            03 февраля 2016, 16:40
                            0
                            Спасибо! Тоже обратил внимание на отсутствие связи с именем контекста в плагине Василия.

                            А вот момент с «все домены ссылаются в одну папку» остается открытым. Установив плагин bezumkin.ru/sections/tips_and_tricks/2439/ и выполнив «Направить домен на существующую директорию» в Бегет получаю:
                            При открытии ресурса из нового контекста — сначала открывается URL нового домена (на доли секунды), а затем открывается URL основного домена с alias от нового.
                            Похоже на редирект 301 от хостинга, но в серверных делах я тугой. Может кто с форума поможет разобраться?
                        brioni
                        04 февраля 2016, 14:06
                        0
                        Тех поддержа Бегет сообщила, что если в разделе «Управление доменами» выбрать «Направить домен на существующую директорию» то в конфиг Apache получается следующее:
                        <VirtualHost *:80>
                          DocumentRoot /home/y/sssr/основной-домен.ru/public_html
                          ServerName новый-домен.ru
                          ServerAlias www.новый-домен.ru
                          SetEnvIf X-Forwarded-Proto https HTTPS=on
                          TimeOut 300
                          ScriptAlias /cgi-bin/ /home/y/sssr/основной-домен.ru/public_html/cgi-bin/
                          <Directory /home/y/sssr/основной-домен.ru>
                            Options All -Indexes
                            AllowOverride All
                          </Directory>
                        </VirtualHost>
                        То есть выполняется требование №1 автора поста
                        все домены ссылаются в одну папку,
                        Однако, при открытии страницы из нового контекста происходит редирект на основной-домен.ru
                        Бегет говорит, что Переадресация на основной домен настроена в конфигурационном файле ./core/config/config.inc.php:
                        if (!defined('MODX_HTTP_HOST')) {
                            if(defined('PHP_SAPI') && (PHP_SAPI == "cli" || PHP_SAPI == "embed")) {
                                $http_host='основной-домен.ru';
                                define('MODX_HTTP_HOST', $http_host);
                            } else {
                                $http_host= array_key_exists('HTTP_HOST', $_SERVER) ? $_SERVER['HTTP_HOST'] : 'основной-домен.ru';
                                if ($_SERVER['SERVER_PORT'] != 80) {
                                    $http_host= str_replace(':' . $_SERVER['SERVER_PORT'], '', $http_host); // remove port from HTTP_HOST
                                }
                                $http_host .= ($_SERVER['SERVER_PORT'] == 80 || $isSecureRequest) ? '' : ':' . $_SERVER['SERVER_PORT'];
                                define('MODX_HTTP_HOST', $http_host);
                            }
                        }
                        Почему такая Переадресация вообще происходит и как её отключить?

                        З.Ы. Также заметил, что открытие сайта нового контекста и последующая Переадресация на основной-домен просходит как при включенном, так и при отключенном плагине: bezumkin.ru/sections/tips_and_tricks/2439/
                          brioni
                          05 февраля 2016, 00:02
                          0
                          Помогла случайность: выход их админки основного сайта и очитска кэша в браузере (Chrome)
                          brioni
                          04 февраля 2016, 19:10
                          0
                          Странно, что при очевидных плюсах и выгодах мультисайта на Modx, созданная ветка обсуждений такая сухая и равнодушная.

                          Пожалуйста, отзовитесь владельцы мультисайтов на «обычных» хостингах типа Бегет и поделитесь пошаговым опытом.
                          Особенно интересуют настройки хостинга для успешной работы мультисайта!

                          З.Ы. — данная тема уже первая в поисковиках по запросу «мультисайт Modx», а значит у программистов есть отличный шанс доказать свой профессионализм и найти новых заказчиков…
                            Андрей
                            04 февраля 2016, 19:46
                            0
                            А я задался таким вопросом — работать то все работает, но папки сайта ак таковой нет (я про поддомен). Даже самого поддомена не создано в хостинге. Задал сей вопрос в хостинг — теперь опять решаем всем миром))
                            brioni
                            12 февраля 2016, 18:47
                            0
                            Запустил мультисайт по инструкции автора.
                            Удалось обойтись без создания папок в корне для каждого сайта — файлы отлично подгружаются из общей папки assets и не требуется вырезать часть URL.
                            Также избежал создания отдельных чанков для доп сайтов, кроме footer где стоит индивидуальный счетчик. Например, логотип сайта в header легко подгружается из общей кучи путем:
                            <img src="assets/template/images/logo [[++site_name]].png" alt="" />
                            . То есть создаем сколько угодно логотипов соблюдая название logo [[++site_name]].png и создавать отдельный чанк не нужно.
                            getTickets и pdoMenu отлично понимают контекст, хотя в некоторых случаях и пришлось добавить параметр &context=``
                            В итоге копирую «шаблонный» контекст и на него вешаю новый домен разделы и документы использую все чанки и шаблоны от основного сайта.

                            Однако остался нерешенный момент с файлом robots.txt, а именно строкой Host:
                            Пока её тупо удалил — посмотрим на реакцию поисковиков…

                            P.S. — Спасибо автору поста за идею — люблю все оптимизировать. Например, хостинг Бегет теперь обходится дешевле, т. к. тарифы привязаны к количеству сайтов, а количество доменов не ограничено. Думаю ход мысли вы уловили :)
                              Василий Наумкин
                              12 февраля 2016, 19:28
                              0
                              Уловили, ага.

                              Именно поэтому на modhost.pro количество доменов ограничено изначально.
                                Игорь
                                10 февраля 2017, 04:45
                                3
                                +1
                                Однако остался нерешенный момент с файлом robots.txt, а именно строкой Host:

                                В контексте создаем и публикуем ресурс (например, robots.txt) с пустым шаблоном: тип ресурса — документ, тип содержимого — text, псевдоним — robots. В содержимое пишем:
                                User-agent: *
                                Allow: /
                                Host: [[++http_host]]
                                Sitemap: [[++site_url]]sitemap.xml
                                  brioni
                                  10 февраля 2017, 13:12
                                  0
                                  Благодарочка
                                    Дмитрий Куликов
                                    12 февраля 2018, 01:01
                                    0
                                    У меня такое решение не работает и выдает ошибку 404
                                      Дмитрий
                                      12 февраля 2018, 12:59
                                      0
                                      можно пользоваться компонентом RobotsBuilder. Вполне себе на мультисайтах хорошо работает.
                                  Станислав
                                  10 апреля 2016, 23:15
                                  0
                                  Привет.
                                  Столкнулся с задачей.
                                  Что писать http_host, site_url когда домен вида «русскийсайт.ру», «поддомен.русскийсайт.ру»
                                  ???
                                    Владимир
                                    10 апреля 2016, 23:21
                                    1
                                    0
                                    Как обычно:
                                    Домен: русскийсайт.рф
                                    Домен: XN--80APDBB9AHADMC.XN--P1AI

                                    Эрадж Шамс
                                    03 октября 2016, 08:34
                                    0
                                    Здравствуйте.
                                    Не подскажите правила для .htaccess для головного сайта сайт.ru и его поддомена поддомен.сайт.ru, чтобы оба открывались без www? .htaccess у них общий.
                                    Сейчас стоит
                                    RewriteCond %{HTTP_HOST} .
                                    RewriteCond %{HTTP_HOST} !^сайт\.ru [NC]
                                    RewriteRule (.*) https://сайт.ru/$1 [R=301,L]
                                    и когда захожу на поддомен.сайт.ru, то он переадресовывает на сайт.ru.
                                    Правило
                                    # Редирект site1.ru -> www.site1.ru
                                    RewriteCond %{HTTP_HOST}    ^site1.ru\.ru [NC]
                                    RewriteRule ^/?(.*)         http://www.site1.ru/$1 [R=301,L]
                                     
                                    # Редирект всех остальных www -> non-www, кроме site1.ru
                                    RewriteCond %{HTTP_HOST}    !^www\.site1\.ru [NC]
                                    RewriteCond %{HTTP_HOST}    ^www\.(.*)$ [NC]
                                    RewriteRule ^(.*)$          http://%1/$1 [R=301,L]
                                    не работает ((
                                    готов отблагодарить денюжкой
                                      An Si
                                      03 октября 2016, 14:22
                                      +1
                                      Заменяем
                                      RewriteCond %{HTTP_HOST} .
                                      RewriteCond %{HTTP_HOST} !^сайт\.ru [NC]
                                      RewriteRule (.*) https://сайт.ru/$1 [R=301,L]
                                      на
                                      RewriteCond %{HTTP_HOST} .
                                      RewriteCond %{HTTP_HOST} ^www\.сайт\.ru [NC]
                                      RewriteRule (.*) https://сайт.ru/$1 [R=301,L]
                                      Для поддомена такое правило не требуется. Вряд ли по адресу www.поддомен.сайт.ru попадёте на поддомен.сайт.ru. Будет какая-нибудь ошибка типа сервер не найден. Склейка в этом случае не требуется.
                                        Эрадж Шамс
                                        03 октября 2016, 19:37
                                        0
                                        Спасибо большое за ответ. К сожалению переадресация все равно происходит. Пытался закрывать такие настройки
                                        # The Friendly URLs part
                                        RewriteCond %{REQUEST_FILENAME} !-f
                                        RewriteCond %{REQUEST_FILENAME} !-d
                                        RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
                                        но все безтолку.
                                        Когда закрываю вообще все настройки, то вроде все работает, правда сейчас почему-то на дочерних страницах выходит 404 ошибка. Не силен в htaccess, поэтому ищу человека, который поможет разобраться.
                                      Михаил
                                      01 февраля 2017, 08:45
                                      0
                                      Помогите пожалуйста. Уже вторые сутки бьюсь. Создал по инструкции Василия, вроде все норм. открывается site.ru и test.site.ru Но контент не меняется, показывает везде какой на site.ru. Скопировал контекст с сохранением структуры и урлами и т.д. .htaccess прописал редиректы как в примере автора. В чем проблема?
                                        Михаил
                                        01 февраля 2017, 08:52
                                        0
                                        создал сниппет с $_SERVER['HTTP_HOST'], вставил его в шаблон на странице test.site.ru показывает хост site.ru
                                          Михаил
                                          01 февраля 2017, 09:31
                                          0
                                          Решил проблему
                                        Aleksandr
                                        09 февраля 2017, 12:33
                                        1
                                        0
                                        Добрый день,

                                        Подскажите как правила Apache2 переделать под nginx
                                        RewriteCond %{HTTP_HOST}    ^www\.sub.domen-1\.ru [NC]
                                        RewriteCond %{REQUEST_FILENAME} !-f
                                        RewriteCond %{REQUEST_FILENAME} !-d
                                        RewriteRule ^(.+)\.(ico|png|gif|jpg|jpeg|pdf|css|js)$ /site/sub.domen-1.ru/$0 [L,NC]

                                        Попробовал вот так, не работает
                                        if ($host = "www.sub.domen-1.ru"){ rewrite ^/(.+)\.(ico|png|gif|jpg|jpeg|pdf|css|js)$ /site/sub.domen-1/$1 break;}
                                          Aleksandr
                                          09 февраля 2017, 13:02
                                          0
                                          if ($host = "www.sub.domen-1.ru"){ rewrite ^/(.+)\.(ico|png|gif|jpg|jpeg|pdf|css|js)$ /site/sub.domen-1.ru/$1 break;}
                                          Murashkin
                                          24 апреля 2017, 17:32
                                          0
                                          Здравствуйте. Планируется сайт на поддоменах для разных российских городов, и у каждого поддомена еще 2 языка (рус,en). Как такое можно реализовать, используя контексты? Отдельно эти две задачи реализовывал на разных сайтах. Но 2-в-1 не приходилось, и описания подобного нигде не нашел.
                                            Murashkin
                                            02 июня 2017, 15:20
                                            0
                                            Никто не сталкивался с таким?
                                            У меня получается 5 регионов на поддоменах типа site.ru, kazan.site.ru, spb.site.ru, nn.site.ru, ekb.site.ru. Это планируется на контекстах реализовать по инструкции Безумкина.
                                            И у каждого такого сайта 2 языка будет. На контекстах уже не получится, насколько я понимаю, т.к. их функции заняты. Что использовать в данном случае посоветуете?
                                              Владимир
                                              02 июня 2017, 15:37
                                              0
                                                Murashkin
                                                02 июня 2017, 16:19
                                                0
                                                Выглядит неплохо. Но совсем свежая разработка, посмотреть бы примеры готовые. Наткнулся также на модуль Lingua и какой-то migxMultiLang. Но Lingua, как понял из документации, не подходит, т.к. нельзя для одной страницы на разных языках разные темплейты использовать. Про второй пока вобще мало инфы нашел.
                                                  Владимир
                                                  02 июня 2017, 16:32
                                                  0
                                                  темплейты для разных языков- смотрите в сторону fenom и в случае с Lingua и с Локализатором, хотя скорее не совсем разные темплейты, а один темплейт и разные блоки феномом переключать в зависимости от языка
                                            BUSERGAl
                                            27 апреля 2017, 23:47
                                            0
                                            Вопрос по урлам, не получается укоротить часть урл., выдает ошибку 500

                                            file.modx.pro/files/1/6/e/16e4652a6c7eb72e4f71ee443fbb53be.jpg
                                            file.modx.pro/files/8/f/c/8fc57695113aadff0da069775c615fbb.jpg
                                            file.modx.pro/files/e/1/3/e13cd28dffc7e19edaafdc0d4373a30b.jpg
                                            file.modx.pro/files/7/e/0/7e084603aedb4096a59958253ca04f13.jpg

                                            при отключении плагина все работает корректно…
                                              kaix8
                                              20 июля 2017, 12:31
                                              0
                                              Подскажите, а как быть с https соединением?
                                              Сейчас есть домен domen.ru — он доступен по https соединению.
                                              Есть poddomen.domen.ru — он сейчас доступен только по http.
                                              При заходе на poddomen.domen.ru его редиректит на domen.ru
                                              в .htaccess указано
                                              RewriteCond %{HTTP_HOST} .
                                              RewriteCond %{HTTP_HOST} !^domen\.ru [NC]
                                              RewriteRule (.*) https://domen.ru/$1 [R=301,L]
                                              
                                              RewriteCond %{SERVER_PORT} !^443$ 
                                              RewriteRule ^(.*)$ https://domen.ru/$1 [R=301,L]
                                              
                                              RewriteCond %{REQUEST_FILENAME} !-f
                                              RewriteCond %{REQUEST_FILENAME} !-d
                                              RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
                                              Что бы сделать для поддомена https, нужно создать его в отдельной директории. Но тогда не работает мультисайтовость.

                                              Подскажите, как сделать что бы не редиректило с poddomen.domen.ru на domen.ru?
                                              Или как настроить мультисайтовость, в случае создания поддомена в отдельной директории?
                                                Павел
                                                25 августа 2017, 04:45
                                                1
                                                0
                                                не нашел как спрятать шаблоны не относящиеся к текущему контексту.
                                                Кто нибудь нашёл как убрать шаблоны не относящиеся к текущему контексту?
                                                А то получаеться, если много разных клиентов — (контекст), то показывает очень много шаблонов!
                                                  Павел
                                                  25 августа 2017, 04:55
                                                  0
                                                  Или хотя бы как меняеться дефолтный шаблон для конкретной группы пользователей?
                                                  Если менялись бы они, тогда можно было как то убрать вообще выбор Шаблонов в редакторе Ресурса, на скрине я показал, что имею ввиду:
                                                    Илья Уткин
                                                    25 августа 2017, 06:40
                                                    0
                                                    Можно у контекста создать настройку default_template — в ней указать id шаблона, который нужно использовать у дочерних ресурсов.
                                                      Павел
                                                      25 августа 2017, 06:56
                                                      0
                                                      Спасибо попробовал, всё равно все шаблоны выводятся
                                                    Павел
                                                    25 августа 2017, 05:09
                                                    0
                                                    Случайно удалил скрин сори, вот:
                                                      Димыч
                                                      04 января 2019, 14:26
                                                      0
                                                      Как настроить поддомены в ISP manager:
                                                      просто прописываете нужные поддомены в псевдонимах основного домена. Автоподдомены — отключены. Никакие папки создавать не нужно.
                                                      Домены второго уровня скорее всего также добавляются (еще не пробовал).
                                                        РОМАН
                                                        24 марта 2019, 13:56
                                                        0
                                                        Приветсвую! Делаю все настройки по инструкции, но контенты не переключаются в зависимости от доменного имени, отправляет на главную страницу основного сайта. Если менять id стартовой у главного сайта в насторойках контента, переадресация идет на нужный id. В чем может быть проблема?
                                                          Александр Коваленко
                                                          26 марта 2022, 22:02
                                                          0
                                                          Всем добра!
                                                          Прочитал почти все комментарии но не нашел вопроса с похожим запросом.
                                                          У меня есть много однотипных сайтов site-region1.ru, site-region2.ru, site-region3.ru и тд.
                                                          Для некоторых нужна мультиязычность (site-region3.ru русская версия, site-region3.ru/en/ — английская)
                                                          Каждый регион имеет свой контекст. И если есть языковая версия, то она выносится в новый контекст.
                                                          Использовал код для переключения контекстов отсюда — bezumkin.ru/sections/tips_and_tricks/2439/
                                                          Но использовал для доменов и поддоменов, который использует http_host для проверки.

                                                          Вот)))
                                                          Вопрос в том, как соединить эти 2 метода проверки, чтобы проверить http_host, а потом base_url?
                                                          Спасибо большое за любую помощь!
                                                            Николай Савин
                                                            27 марта 2022, 12:45
                                                            0
                                                            Вам принципиально определять язык через сегмент адреса?
                                                            Было бы существенно проще, если бы язык шел поддоменом. en.site-region3.ru/
                                                            В текущем случае вы конечно осилите переключение языка основываясь на host + /lang/
                                                            Но останутся нерешенными проблемы внутри JS. Все ajax запросы будут улетать на базовый хост, и ответы будут приходить на базовом языке.
                                                              Александр Коваленко
                                                              27 марта 2022, 13:29
                                                              0
                                                              Да, это основное требования для SEO. Чтобы языковые версии оставались внутри одного домена или поддомена.
                                                              Поэтому ищу способ решения задачи в такой форме. Не совсем понял про JS, какие трудности могут возникнуть?
                                                                Николай Савин
                                                                27 марта 2022, 14:09
                                                                0
                                                                Я могу ошибаться. Тогда коллеги меня поправят.

                                                                Возьмем к примеру компонент mSearch2 и его автодополнения в поисковой строке.
                                                                Компонент отправляет запросы к серверу, беря за основу текущий хост. Который всегда без сегментов адреса.
                                                                Сервер используя хост, получает язык контекста и отдает ответ на языке чистого хоста.

                                                                Таким образом находясь на адресе site-region3.ru/en/ сервер будет запрашивать контекст основываясь только на хосте site-region3.ru и язык ответа для поисковых запросов будет русский (ну или какой там будет основным)

                                                                И таких компонентов, которые берут за основу только хост — много. Их можно дорабатывать конечно. Просто возни больше.
                                                              Константин Ильин
                                                              27 марта 2022, 22:00
                                                              +1
                                                              Если я правильно понял о поиске языковой версии в урл, то вот
                                                              <?
                                                              // Массив допустимых язоковые версий, можно сделать настройку в модх и через getOption() получить, но это лишний запрос к БД
                                                              $allowLanguages = ['en','es'];
                                                              
                                                              // Разбор урла
                                                              $queryArray = parse_url($_SERVER['HTTP_REFERER']);
                                                              
                                                              
                                                              // Разбор пути запроса 
                                                              $urlArray = explode('/',  $queryArray['path']);
                                                              
                                                              // Если первый сегмент пути есть в массиве допустимых языков, соответственно урл содержит языковую версию
                                                              if(in_array($urlArray[1], $allowLanguages)){
                                                                  
                                                                  // Тут ищем контекст с языковой версией и делаем переключение на него или что-то другое
                                                              
                                                              }
                                                              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                              104