Почему определение MULTISITE true изменяет используемое подключение к базе данных

4 февр. 2015 г., 19:01:38
Просмотры: 2.87K
Голосов: 0

Я скопировал мультисайтовую установку WordPress для локальной разработки. Заметил, что если установить define('MULTISITE', true); в wp-config, то возникает стандартная ошибка подключения к базе данных. Если отключить мультисайт, тема загружается, но некоторые плагины отсутствуют.

Может кто-то подсказать, что я упустил? Возможно, имеет значение, что мое локальное окружение использует NGINX, а оригинальный сайт работал на Apache. В моей конфигурации nginx нет специфичных настроек для мультисайта.

Если я установлю оба этих параметра в wp-config:

define('MULTISITE', true); // Включаем режим мультисайта
define('SUBDOMAIN_INSTALL', true); // Используем установку на поддоменах

Меня перенаправляет на http://http//local.mydevsite/wp-signup.php?new=local.mysdevsite

Туда же происходит перенаправление при попытке зайти в /wp-admin

8
Комментарии

Вы говорите, что сделали копию - могу ли я предположить, что вы обновили константы подключения к базе данных в файле wp-config.php, чтобы сайт больше не обращался к оригинальной базе данных?

David Gard David Gard
5 февр. 2015 г. 12:14:32

Да, они были изменены для моей локальной копии БД и подтверждены как корректные

codecowboy codecowboy
5 февр. 2015 г. 12:18:25

У вас всё ещё есть строка define('WP_ALLOW_MULTISITE', true); в wp-config.php (выше строк, указанных в вашем вопросе)?

David Gard David Gard
5 февр. 2015 г. 12:21:16

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

codecowboy codecowboy
5 февр. 2015 г. 12:22:46

Нет, не нужно. Думаю, она просто добавляет пункт 'Сеть' в меню Инструменты, но стоит проверить. Я также предполагаю, что ты изменил константу DOMAIN_CURRENT_SITE, чтобы она соответствовала URI твоей локальной копии (не включай http:// или завершающий слеш)?

David Gard David Gard
5 февр. 2015 г. 12:26:56

Да, я также изменил это - без http и завершающего слеша.

codecowboy codecowboy
5 февр. 2015 г. 12:29:15

Раз это всего лишь копия, как насчет удаления констант для мультисайта (кроме WP_ALLOW_MULTISITE) и повторного запуска установки?

David Gard David Gard
5 февр. 2015 г. 12:30:43

Давайте продолжим это обсуждение в чате.

codecowboy codecowboy
5 февр. 2015 г. 12:46:18
Показать остальные 3 комментариев
Все ответы на вопрос 1
0

Похоже, это ошибка с URL-адресами, которые определены в мультисайтовой базе данных и/или проблема с файлом .htaccess.

При переносе обычной установки WordPress с продакшена на локальный сервер, например, вы можете изменить URL-адреса, добавив в ваш wp-config.php:

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

Однако в мультисайте есть дополнительные ссылки на URL-адреса, с которых он был изначально настроен, в базе данных. Если в вашей локальной базе данных посмотреть таблицы wp_blogs, wp_site и wp_options, там будут записи для продакшен-сайта. Вам нужно изменить их на новый локальный URL, например, с livesite.com на localsite.com.

  • В wp_blogs это все записи в колонке domain
  • В wp_site это запись в колонке domain
  • В wp_options это значение option_value, соответствующее option_name siteurl и home

Альтернативный вариант для упрощения настройки и минимизации изменений в базе данных: я рекомендую оставить существующие URL-адреса и просто добавить правило в ваш hosts-файл, чтобы перенаправлять их на локальную машину. Например, в hosts можно прописать, чтобы livesite.com перенаправлялся на 127.0.0.1. Таким образом, базу данных менять не придется. Недостаток этого подхода в том, что вам придется удалять запись для просмотра продакшена, и некоторых это может запутать. Так что выбор за вами.

Затем нужно убедиться, что ваш .htaccess корректно настроен для мультисайта и перезаписи URL. Эти настройки можно найти здесь в зависимости от того, используете ли вы субдомены или подпапки.

Наконец, убедитесь, что на вашей локальной настройке активен модуль rewrite_module и headers_module (или его эквивалент) на вашем локальном веб-сервере.

5 февр. 2015 г. 16:09:13