При переносе сайта WP почему wp-admin перенаправляет на старый сайт?
Я в процессе переноса сайта WP с одного хостинга на другой. Я скопировал базу данных и все файлы, создал новую базу данных и импортировал в неё старую. Затем я изменил файл wp-config. Главная страница отображается нормально, но когда я пытаюсь получить доступ к /wp-admin, меня перенаправляет обратно на старый сайт.
Новый сайт находится на тестовом сервере, где я планирую внести изменения в стили, прежде чем запустить сайт в работу.
Что я упускаю в этом переходе? Как заставить сайт правильно отвечать на dev URL?
Если это одиночная установка WordPress, в базе данных есть несколько записей с вашим старым доменом. В частности, siteurl
и home
в таблице wp_options
.
Тем не менее, если URL разработки временный, вы также можете установить следующие две константы в файле wp-config.php
:
define('WP_HOME', 'http://' . $_SERVER['SERVER_NAME']);
define('WP_SITEURL', WP_HOME . '/');
При условии, что WordPress установлен в корне вашего сайта.

Вам также потребуется обновить guid
для каждой записи в wp_posts
, если есть вложения, используя что-то вроде UPDATE wp_posts SET guid = REPLACE('<old_url>','<new_url>', guid)

GUID не следует изменять. Подробнее здесь: http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note

Это не большая проблема. Ваша база данных содержит все предыдущие ссылки, которые не могут быть автоматически преобразованы. Есть два типа решений для этого:
В файл
wp-config.php
добавьте следующий код:define('WP_HOME', 'http://' . $_SERVER['SERVER_NAME']); define('WP_SITEURL', WP_HOME . '/');
Измените следующий SQL, заменив "oldurl" на предыдущую ссылку, а "newurl" на текущую:
UPDATE wp_posts SET guid = replace(guid, 'oldurl','newUrl');
UPDATE wp_posts SET post_content = replace(post_content, 'oldurl', 'newUrl');
UPDATE wp_links SET link_url = replace(link_url, 'oldurl', 'newUrl');
UPDATE wp_links SET link_image = replace(link_image, 'oldurl', 'newUrl');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'oldurl', 'newUrl');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'oldurl', 'newUrl');
UPDATE wp_options SET option_value = replace(option_value, 'oldurl', 'newUrl') WHERE option_name = 'home' OR option_name = 'siteurl';
Выполните эти SQL-запросы в вашей базе данных, изменив префикс, если у вас используется что-то отличное от wp_
.

Простое изменение URL сайта в конфигурации скорее всего не обновит все внутренние данные для создания рабочей тестовой версии (если только сайт не очень простой). У вас возникнут проблемы с сериализованными данными, которые не будут отображаться, и ссылками внутри записей, указывающими на старый сайт.
Гораздо разумнее использовать инструменты миграции, такие как Backup Buddy или Duplicator, чтобы создать полную копию сайта, которую можно будет развернуть в новом месте с новым URL. При таком подходе у вас останутся рабочие ссылки внутри записей, пользовательские ссылки меню и т.д. Использование одного из этих инструментов также упростит публикацию ваших изменений. Просто упакуйте всё и разверните на рабочем сайте, когда закончите.
Если вы не хотите тратить время на повторную загрузку всего контента, можно перенести только базу данных с помощью инструмента вроде WP Migrate DB. Установите его на рабочем сайте, экспортируйте базу данных с новым URL и импортируйте мигрированную базу данных на тестовый сервер через phpMyAdmin или аналогичный инструмент. Жёстко прописанные ссылки в вашей теме всё равно нужно будет обновить, а также потребуется обновить .htaccess, если вы устанавливаете сайт в подпапку.
Измените строку RewriteBase на:
RewriteBase /ваша_папка/
А строку перенаправления на index.php на:
RewriteRule . /ваша_папка/index.php [L]

Перед переносом сайта на другой URL необходимо изменить Адрес сайта (URL) и Адрес WordPress (URI) через административную панель.
В вашем случае это невозможно сделать на работающем сайте, поэтому вы можете воспользоваться инструментами вроде поиска и замены в базе данных для изменения URL в базе данных тестового сайта.
Также можете обратиться к руководству Перенос WordPress
