Каталог с несколькими сайтами - только корневой администратор, доступный в 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 должен знать, какой блог загружать, и просто загружай его, черт возьми.
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.
После перезагрузки моего сервера и очистки печенье, это, казалось, сделало свое дело!