Я создаю автоматизированное развертывание 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) Я только что заметил, что при попытке изменить тему для сайта превью темы не работает.
Всего несколько заметок:
Ваш 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 (я опубликовал там несколько экспериментов некоторое время назад).
Рассмотрим решение только с обновленным конфигом 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. Нет необходимости писать код.