Вопрос или проблема
У меня есть два домена 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
.
Вот как это можно сделать:
-
Уберите определение констант из
wp-config.php
:Убедитесь, что у вас не установлены константы
WP_HOME
иWP_SITEURL
в вашем файлеwp-config.php
, так как они вызывают поведение редиректа. -
Добавьте фильтр в
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
. Это позволит вам легко перенаправлять пользователей на другой домен, не вызывая при этом перенаправления самого домена при загрузке страницы.
Если у вас есть дополнительные вопросы или нужна помощь с настройкой, не стесняйтесь обращаться!