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) Я только что заметил, что при попытке изменить тему для сайта превью темы не работает.

2 ответа

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

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

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

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

По поводу пропавших /wp/ Даниэль Бачхубер, участвующий в URL- адресах сетевых администраторов, опубликовал этот удобный фрагмент кода, который устраняет эту проблему. Он использует 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 на Multisite в подкаталоге с адресом корневого сайта.

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

Рассмотрим решение только с обновленным конфигом 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. Нет необходимости писать код.

Другие вопросы по тегам