WordPress Skeleton, VVV, Multisite и правильные правила Nginx

Я создаю автоматизированное развертывание WordPress с помощью Composer и храню папку wp-content вне основной установки WP (поскольку у меня есть несколько пользовательских плагинов и тем), которая извлекается из github.

После извлечения из github и запуска composer, моя структура папок выглядит следующим образом:

-composer.php
-env.php
-public/
|-index.php
|-wp-config.php
|-wp-content/
|-themes/
|-plugins/
|-sunrise.php
|-wp/
|wordpress stuff

Мои правила htaccess хорошо работают при использовании MAMP, но я использую VVV в качестве среды разработки, а VVV использует nginx, поэтому мои правила перезаписи не работают.

VVV использует 2 файла conf: один файл, который является общим для всех сайтов на виртуальной машине (общие правила), и один файл для каждого сайта (в основном это просто список корневых папок).

Вот мой файл conf для конкретного сайта:

server {
listen       80;

listen       443 ssl;

server_name  auto.dev ~^auto\.\d+\.\d+\.\d+\.\d+\.xip\.io$;
root         /srv/www/auto/htdocs/wordpress;

# my rules
# tells nginx to prepend "wp" to things
rewrite ^/(wp-.*.php)$ /wp/$1 last;
rewrite ^/(wp-(content|admin|includes).*) /wp/$1 last;
# end WP dir rules

include /etc/nginx/nginx-wp-common.conf;

}

поэтому я добавил

rewrite ^/(wp-.*.php)$ /wp/$1 last;
rewrite ^/(wp-(content|admin|includes).*) /wp/$1 last;

И это работает (я могу получить административную область, и в административной области есть все ее CSS и JS), но я сталкиваюсь с 3 большими проблемами:

1) Веб-интерфейс сайта больше не имеет CSS. Консоль Chrome показывает ошибку во второй строке моего index.php:

Uncaught SyntaxError: Unexpected token <

примечание — похоже, что некоторые из тем работают, сайт с темой Twenty Fifteen выглядит так, как будто работает.

2) Я не могу попасть в многосайтовую сеть, по какой-либо причине, когда пытаюсь зайти http://auto.dev/wp-admin/network/ мой запрос переписан как: http://http//auto.dev/wp-admin/network/и, таким образом, очевидно, не работает

3) Наконец, я не могу войти на свои сайты. Вещи как http://auto.dev/wiki/wp-admin/ дает мне цикл перенаправления

4) Я только что заметил, что при попытке изменить тему для сайта превью темы не работает.

4

Решение

Всего несколько заметок:

Ваш wp-content/ папка не находится под wp/ папка, как вы указали здесь:

rewrite ^/(wp-(content|admin|includes).*) /wp/$1 last;

Так как темы по умолчанию, как Двадцать пятнадцать приходите с /wp/wp-content/ папку, это может объяснить, почему вы заставляете его работать там.

По поводу пропавших /wp/ часть в админке сети, Даниэль Бачхубер опубликовал этот удобный фрагмент кода это решает эту проблему. Он использует network_site_url фильтр, чтобы ввести его.

<?php
/**
* Fix network admin URL to include the "/wp/" base
*
* @see https://core.trac.wordpress.org/ticket/23221
*/
add_filter( 'network_site_url', function( $url, $path, $scheme ){
$urls_to_fix = array(
'/wp-admin/network/',
'/wp-login.php',
'/wp-activate.php',
'/wp-signup.php',
);
foreach( $urls_to_fix as $maybe_fix_url ) {
$fixed_wp_url = '/wp' . $maybe_fix_url;
if ( false !== stripos( $url, $maybe_fix_url )
&& false === stripos( $url, $fixed_wp_url ) ) {
$url = str_replace( $maybe_fix_url, $fixed_wp_url, $url );
}
}
return $url;
}, 10, 3 );

Также смотрите открытый билет # 23221 на Мультисайт в подкаталоге с адресом корневого сайта

Немного обсуждения здесь на GitHub в отношении nginx + мультисайт со структурой wp-skeleton (я опубликовал там несколько экспериментов некоторое время назад).

3

Другие решения

Рассмотрим решение только с обновленным конфигом NGINX, который я опубликовал на GitHub.
Измените свои переписывает со следующим

if (!-e $request_filename) {
rewrite ^/(wp-admin/.*)$ /wp/$1 last;
rewrite ^/[_0-9a-zA-Z-]+(/wp-admin/.*)$ /wp/$1 last;

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

rewrite ^/[_0-9a-zA-Z-]+(/wp-includes/.*) /wp/$1 last;
rewrite ^/(wp-[^/]+\.php)$ /wp/$1 last;
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}
rewrite ^/(wp-includes/.*)$ /wp/$1 last;

Это решит все проблемы с доступом к админ-панелям и сетевой админ-панели с установкой подпапки WordPress Multisite. Нет необходимости писать код.

0

По вопросам рекламы [email protected]