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

Сделать это очень просто. Первым делом, вам нужно создать зону в управление доменами.

Затем добавить в неё нужные А записи, которые будут указывать на IP адрес сайта. Здесь возможны 2 варианта:

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

После этого остаётся только делегировать свой домен на наши сервера:

ns1.modhost.pro
ns2.modhost.pro
ns3.modhost.pro
ns4.modhost.pro


Если вдруг, по каким-либо причинам, ваш регистратор не хочет принимать эти NS сервера, укажите ему такие

ns1.selectel.ru
ns2.selectel.ru
ns3.selectel.ru
ns4.selectel.ru


Если вы хотите использовать почту Яндекс (или другого сервиса), вам нужно перенести оттуда еще 3 записи.

Запись MX

и 2 записи TXT. Первая с правилами SPF

а вторая с подписью DKIM

Не забывайте, что сайм домен вы купили у своего регистратора, нам вы только передаёте его на обслуживание, для собственного удобства. По вопросам продления оплаты за домен вам по-прежнему нужно обращаться к своему регистратору.

Поддержка доменов сайтом

Если вы указываете несколько доменов своему сайту, сразу встаёт вопрос - как он будет принимать для них запросы?

Для понимании логики работы, давайте немного разберёмся с теорией. Домен, или доменное имя — это некий набор разрешённых символов, которое связывается с IP адресом сервера и указывает на сайт.

Домены были придуманы для того, чтобы

  1. Не запоминать IP адреса
  2. Разрешить размещать несколько сайтов на одном IP адресе.

Говоря простым языком, домен — это ссылка на сайт в интернет. Наш сервис лимитирует только домены второго уровня (site1.com, site2.com, site3.com) и не лимитирует домены третьего, если они являются дочерними к уже назначенным (subsite.site1.ru, anysite.site2.com и т.д.).

Для связи домена и сайта вы должны сделать 2 вещи:

  1. Создать домен у себя в DNS (см. выше) и указать A запись с IP сервера
  2. Добавить домен своему сайту в настройках нашей панели управления, чтобы сайт знал, что именно он отвечает на это имя - ведь сайтов на сервере более одного.

Таким образом и получается, что при запросе ваших доменных имён в браузере идёт запрос в DNS, оттуда на наш сервер, а он уже переправляет его в корень вашего сайта на index.php. Дальше дело за вами.

Хотите сделать редирект — на здоровье. Хотите загрузить файлы из какой-то директории — пожалуйста. Никаких ограничений вашей фантазии.

В общем случае, если вы не используете MODX, вы можете определять запрошенный сайт примерно так:

<?php
$host = $_SERVER['HTTP_HOST'];
switch ($host) {
    case 'mydomain1.com':
        echo 'Запрошен первый сайт';
        break;
    case 'mydomain2.com':
        echo 'Запрошен второй сайт';
        break;
    default:
        echo 'Неизвестный домен, выводим сайт по умолчанию';
}

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

В случае же с MODX лучше воспользоваться встроенным функционалом, то есть контекстами. Для примера мы сделаем 2 контекста на одном сайте, которые будут отличаться языковыми версиями: русский и английский. Причём, сделаем это двумя способами: через директорию в url одного домена, и двумя разными доменами.

Директории

Плагин для ситуации, когда домен один, а языковые версии отличаются префиксом в адресе: mysite.com/ru/page.html и mysite.com/en/page.html.

То есть, условия такие:

Идея заключается в выборке всех контекстов и сравнения их базового адреса с запросом. Создавать директории и копировать index.php не нужно.

Итак, у нас два контекста: web и en c такими настройками:

Создаём новый плагин, добавляем для него событие OnHandleRequest и копируем этот код:

<?php
// Работаем только на фронтенде и только с friendly urls
if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr' || !$modx->getOption('friendly_urls')) {
    return;
}
// Получаем запрашиваемый url
$alias = $modx->getOption('request_param_alias', null, 'alias', true);
$request = &$_REQUEST[$alias];

// Выбираем контексты с настройкой base_url
$q = $modx->newQuery('modContextSetting', array('key' => 'base_url', 'value:!=' => ''));
$q->select('context_key,value');

$contexts = array();
$tstart = microtime(true);
if ($q->prepare() && $q->stmt->execute()) {
    // Учитываем наш запрос в БД
    $modx->queryTime += microtime(true) - $tstart;
    $modx->executedQueries++;
    // Разбираем результаты
    while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
        $base_url = trim($row['value'], '/');
        $context = $row['context_key'];
        // Если запрос начинается с base_url какого-то контекста
        if (preg_match('/^('.$base_url.')\//i', $request)) {
            // То переключаемся на этот контекст
            // Web инициализируется в index.php - на него переключаться не нужно
            if ($context != 'web') {
                $modx->switchContext($context);
            }
            // Вырезаем base_url из запроса, чтобы MODX нашел ресурс по uri
            $request = preg_replace('/^'.$base_url.'\//', '', $request);
            // Дело сделано - выходим из цикла
            break;
        }
    }
}

Кстати говоря, еще можно у основного контекста web убрать base_url, чтобы он открывался без /ru/, а второй контекст был по-прежнему с /en/.

Поддомены, или разные домены

При конфигурации поддоменами адреса у нас будут такие: ru.mysite.com/page.html и en.mysite.com/page.html.

Этот случай проще, так как нужно только сравнить запрашиваемый хост со значениями в БД и получить соответствующий контекст. Здесь не нужно менять запрос и результат выборки может быть только один.

Настройки контекстов такие:

Точно также создаём плагин, и отмечаем событие OnHandleRequest.

<?php
// Работаем только на фронтенде
if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr') {
    return;
}

// Определяем запрашиваемый хост
$host = $_SERVER['HTTP_HOST'];

// Выбираем контекст с настройкой base_url
$q = $modx->newQuery('modContextSetting', array('key' => 'http_host', 'value' => $host));
$q->select('context_key');

$tstart = microtime(true);
if ($q->prepare() && $q->stmt->execute()) {
    // Учитываем наш запрос в БД
    $modx->queryTime += microtime(true) - $tstart;
    $modx->executedQueries++;
    // Получаем ключ контекста
    if ($context = $q->stmt->fetch(PDO::FETCH_COLUMN)) {
    // Web инициализируется в index.php - на него переключаться не нужно
        if ($context != 'web') {
            $modx->switchContext($context);
        }
    }
}

Как вы понимаете, в настройках контекстов должны быть уникальные http_host.