Каталог с несколькими сайтами - только корневой администратор, доступный в NGINX


Я пытаюсь настроить многосайтовую подкаталоговую установку на NGINX с ядром WordPress в собственном подкаталоге и столкнулся с некоторыми проблемами.

Я использую эту файловую структуру:

/home/site/dev.site.com/current/public/ --- path to webroot /home/site/dev.site.com/current/public/wp/ --- path to WP root /home/site/dev.site.com/current/public/wp/wp-admin/ --- path to WP admin root

Моя желаемая структура URL-адреса:

dev.site.com/wp-admin/network/ --- network admin dev.site.com/ --- root site dev.site.com/wp-admin/ --- root site admin dev.site.com/[sitename] --- additional sites dev.site.com/[sitename]/wp-admin --- additional site admin

Мои многосайтовые перезаписи NGINX:

rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /wp/$2 last; rewrite ^/([_0-9a-zA-Z-]+/)?(.*\.php)$ /wp/$2 last;

Моя полная конфигурация NGINX здесь.

В настоящее время я могу получить доступ к администратору сети (по адресу dev.site.com/wp-admin/network/), корневой сайт (в dev.site.com) и панель администратора корневого сайта (в dev.site.com/wp-admin/).

Когда я пытаюсь получить доступ к любому из дополнительных сайтов (dev.site.com/[sitename]) Я получаю 404 (обрабатывается WordPress). Когда я пытаюсь получить доступ к их админ-панелям (dev.site.com/[sitename]/wp-admin/) Я получаю панель администратора корневого сайта (по URL-адресу, который включает [sitename]).

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

У кого-нибудь есть опыт работы с этим типом конфигурации? Помощь очень ценится!

РЕДАКТИРОВАТЬ: Я проверил свой журнал перезаписи, и nginx, похоже, правильно обрабатывает перезапись и передает правильный URL-адрес GET и все:

2014/09/22 10:38:35 [notice] 4857#0: *54 rewritten data: "/wp/wp-admin/index.php", args: "", client: 127.0.0.1, server: dev.site.com, request: "GET /subsite/wp-admin/ HTTP/1.1", host: "dev.site.com", referrer: "http://dev.site.com/wp/wp-admin/"

По какой-то причине администратор WP не понимает, что запрос относится к дочернему сайту, и вместо этого просто возвращает корневой каталог сайта...

РЕДАКТИРОВАТЬ 2: Я настроил mu-плагин, который просто выплевывает get_admin_url(), и, похоже, WordPress определенно думает, что он находится в другом месте, чем URL, который он фактически возвращает. Когда я ударил dev.site.com/subsite/wp-admin/, get_admin_url() возвращает http://dev.site.com/wp-admin/, путь к корневому администратору сайта. Интрига закручивается...

ПРАВКА 3: (Извините за все правки.) Я могу принудительно загрузить правильный блог, написав функцию, которая подключается к init и запускает switch_to_blog( $id ), но это, очевидно, решение методом грубой силы. WordPress должен знать, какой блог загружать, и просто загружай его, черт возьми.

Author: Chris Van Patten, 2014-09-22

1 answers

Я не уверен на 100%, как я это исправил, но я это сделал.

Несколько вещей, которые я сделал:

Убедитесь, что вы очистили свои файлы cookie или протестировали их в окне инкогнито. Файлы cookie для входа в систему вызвали у меня некоторые проблемы.

Я заменил свои перезаписи nginx на:

rewrite ^/(site1/|site2/|site3/)?(wp-(content|admin|includes).*)$ /wp/$2 break; rewrite ^/(?!wp/)(site1/|site2/|site3/)?(.*\.php)$ /wp/$2 break;

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

После перезагрузки моего сервера и очистки печенье, это, казалось, сделало свое дело!

 1
Author: Chris Van Patten, 2014-09-22 20:57:49