Назад | Перейти на главную страницу

Nginx: переписать подпапку в корень и оставить старые ссылки WordPress действительными

Я борюсь с переписыванием и перенаправлением NginX, но безуспешно. Был бы признателен за помощь.

Ситуация:

У клиента есть 4 домена, которые они хотят указать на одну и ту же установку Wordpress. Хорошо, я нашел хороший плагин WP (Multiple Domain) для этого.

Предыдущая установка WP находилась в папке / wp /, которую мне пришлось переместить в корневой каталог, чтобы плагин Multiple Domains работал.

Поэтому мне пришлось добавить параметры NginX для работы с предыдущей подпапкой / wp / по двум причинам:

Теперь работает ВСЕ belwo, и самое приятное то, что этот URL сохраняет домен в том виде, в каком он был введен (не перенаправляет на основной домен):

domainA.com

domainB.com/?cat=7 -> domainB.com/news

domainC.com/wp/something -> domainC.com/something

location ^~ /wp/(.+) { rewrite ^/wp/(.+)$ $1 last; }

Проблема? ДА, все работает нормально, ЗА ИСКЛЮЧЕНИЕМ случая, когда / wp / вызывается без параметров:

domainA.com/wp -> 404

domainB.com/wp -> 404

...

Я тоже пробовал (.*), но не помогло. Идеи?

РЕДАКТИРОВАТЬ Как сейчас настроено, все 4 домена работают нормально и нормально с / wp / в середине строки URL-адреса, например:

domain.com/wp/news -> domain.com/news (это здорово!)

Единственная проблема сохраняется, когда / wp находится в конце:

domain.com/wp -> domain.com/wp (НЕ перезаписывает / не перенаправляет, что НЕ нормально)


РЕДАКТИРОВАТЬ БОЛЕЕ ЧЕТКИЙ ВОПРОС

Я мог бы просто попросить правило перезаписи NginX, которое будет включать все эти места:

domain.com/WP/что-то
domain.com/WP/ wp-config
domain.com/WP/? cat = 7
domain.com/WP/
domain.com/WP

... но НЕ будет включать файлы wp *:

domain.com/wp-config

Это работает, но не распространяется только на / wp и / wp / без параметров:

location ^~ /wp/(.+) {
 rewrite ^/wp/(.+)$ $1 last;
}

Ваше регулярное выражение требует конечной косой черты после /wp присутствовать, чтобы соответствовать, но вы говорите, что не хотите этого.

location ^~ /wp/(.+) {
     rewrite ^/wp/(.+)$ $1 last;
}

Так что просто сделайте завершающую косую черту необязательной. В этом отношении вам действительно не нужен location; вы можете просто разместить rewrite прямо в соответствующем server блок.

rewrite ^/wp(/.+)? $1 last;