Измените home_url и site_url, но не перенаправляйте на home_url и site_url при загрузке.

Вопрос или проблема

У меня есть два домена uat1.example.com и uat2.example.com, которые указывают на одну и ту же установку WordPress.

Я хочу изменить home_url и site_url для всех ссылок на сайте на uat2.example.com, но не хочу, чтобы происходил редирект на uat2.example.com, если запрос поступает на uat1.example.com.

Допустим, кто-то заходит на мой сайт, uat1.example.com; он должен загрузиться. Но все ссылки на веб-странице должны указывать на uat2.example.com. Таким образом, если пользователь заходит на страницу через uat1.example.com и кликает на любую ссылку, он будет перенаправлен на uat2.example.com; это нормально.

Я пытался добавить это в конфигурацию:

define('WP_HOME','http://uat2.example.com');
define('WP_SITEURL','http://uat2.example.com');

Но когда я посещаю uat1.example.com, меня перенаправляет на uat2.example.com, что очевидно. Но я этого не хочу.

Есть ли какой-нибудь трюк, чтобы home_url и site_url оставались uat2.example.com? Но чтобы, когда я посещаю uat1.example.com, меня не перенаправляло на uat1.example.com, и все же рассматривало uat2.example.com как home_url для всех ссылок на этой странице?

Вам нужно установить WP_SITEURL и WP_HOME в файл wp-config.php. Пожалуйста, добавьте следующий код.

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

В настройках SSL вашего сервера используйте следующий код

define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);

Чтобы добиться желаемого поведения, при котором пользователи, заходящие на uat1.example.com, не перенаправляются, но все ссылки на сайте указывают на uat2.example.com, вам нужно использовать более динамичный подход, чем жестко закодировать home_url и site_url в wp-config.php. Вы можете сделать это, используя фильтр в вашем файле functions.php.

Вот как это можно сделать:

  1. Уберите определение констант из wp-config.php:

    Убедитесь, что у вас не установлены константы WP_HOME и WP_SITEURL в вашем файле wp-config.php, так как они вызывают поведение редиректа.

  2. Добавьте фильтр в functions.php, чтобы динамически изменять home_url и site_url:

    Вы можете использовать фильтры home_url и site_url, чтобы динамически изменять эти URL в зависимости от текущего домена:

add_filter('home_url', 'custom_home_url', 10, 2);
add_filter('site_url', 'custom_site_url', 10, 4);

function custom_home_url($url, $path, $orig_scheme, $blog_id) {
    // Проверяем, является ли текущий домен uat1.example.com
    if ($_SERVER['HTTP_HOST'] === 'uat1.example.com') {
        // Заменяем хост в URL на uat2.example.com
        $url = str_replace('uat1.example.com', 'uat2.example.com', $url);
    }
    return $url;
}

function custom_site_url($url, $path, $scheme, $blog_id) {
    // Проверяем, является ли текущий домен uat1.example.com
    if ($_SERVER['HTTP_HOST'] === 'uat1.example.com') {
        // Заменяем хост в URL на uat2.example.com
        $url = str_replace('uat1.example.com', 'uat2.example.com', $url);
    }
    return $url;
}

Фильтр home_url: Этот фильтр применяется всякий раз, когда вызывается home_url() в WordPress, который генерирует домашний URL вашего сайта. Фильтр site_url: Аналогично, фильтр site_url() используется для генерации URL сайта.

Обе функции проверяют, является ли текущий домен uat1.example.com, и заменяют его на uat2.example.com для всех сгенерированных URL. Однако сама страница продолжит загружаться на uat1.example.com без редиректа.

Ответ или решение

Чтобы реализовать вашу задачу — чтобы ссылки на сайте указывали на uat2.example.com, при этом не перенаправляя пользователей с uat1.example.com на uat2.example.com, можно воспользоваться динамическим подходом с использованием фильтров в файле functions.php вашей темы. Ниже представлен полный ответ на ваш вопрос.

Шаг 1: Удалите определения в wp-config.php

Первым делом необходимо убедиться, что в файле wp-config.php не установлены константы WP_HOME и WP_SITEURL, так как они вызывают поведение перенаправления.

Удалите или закомментируйте следующие строки, если они у вас есть:

// define('WP_HOME','http://uat2.example.com');
// define('WP_SITEURL','http://uat2.example.com');

Шаг 2: Добавьте фильтры в functions.php

Теперь откройте файл functions.php вашей активной темы и добавьте следующий код. Этот код будет динамически изменять URLs для функций home_url() и site_url() на uat2.example.com, если пользователь посещает uat1.example.com.

add_filter('home_url', 'custom_home_url', 10, 2);
add_filter('site_url', 'custom_site_url', 10, 4);

function custom_home_url($url, $path, $orig_scheme, $blog_id) {
    // Проверяем текущий домен
    if ($_SERVER['HTTP_HOST'] === 'uat1.example.com') {
        // Меняем хост в URL на uat2.example.com
        $url = str_replace('uat1.example.com', 'uat2.example.com', $url);
    }
    return $url;
}

function custom_site_url($url, $path, $scheme, $blog_id) {
    // Проверяем текущий домен
    if ($_SERVER['HTTP_HOST'] === 'uat1.example.com') {
        // Меняем хост в URL на uat2.example.com
        $url = str_replace('uat1.example.com', 'uat2.example.com', $url);
    }
    return $url;
}

Объяснение кода:

  • Фильтры: home_url и site_url позволяют модифицировать URL, который возвращается функциями home_url() и site_url() соответственно.
  • Проверка домена: Внутри функций мы проверяем, если текущий хост соответствует uat1.example.com, то заменяем его на uat2.example.com.
  • Возврат измененного URL: После изменения URL функция возвращает новый полный адрес.

Результат

Теперь, когда пользователь зайдет на uat1.example.com, он все равно сможет пользоваться вашим сайтом, но все ссылки будут вести на uat2.example.com. Это позволит вам легко перенаправлять пользователей на другой домен, не вызывая при этом перенаправления самого домена при загрузке страницы.

Если у вас есть дополнительные вопросы или нужна помощь с настройкой, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...