Настройка nginx для работы с мультисайтом WordPress — 301 редирект

У меня возникли проблемы с попыткой запустить мультисайт WordPress (с использованием субдоменов) на nginx.

Вот мой идеальный набор:

domain.com
sub1.domain.com
sub2.domain.com
sub3.domain.com

Любые запросы к www.domain.com должны быть переведены с кодом 301 на domain.com (насколько я понимаю, WordPress все равно удаляет www?)

Я не хочу получать доступ к каким-либо поддоменам любыми другими способами, например, domain2.com направит пользователя на sub2.domain.com - это не то, что я хочу.

Я следил за этим учебник DigitalOcean, и все работало нормально при обычной установке WordPress.

Мой файл local hosts настроен следующим образом:

XXX.XXX.XXX.XXX domain.com
XXX.XXX.XXX.XXX sub1.domain.com

так далее...

Моя проблема в том, что всякий раз, когда я пытаюсь посетить domain.com или sub*.domain.com, меня перенаправляют на совершенно другой сайт на моем сервере, тот, который так уж получилось, что он находится вверху списка в sites-enabled. При ближайшем рассмотрении, когда я проверяю вкладку «Сеть» в Chrome, я вижу, что мой запрос на domain.com или sub*.domain.com перенаправляется 301 на вышеупомянутый несвязанный сайт.

Я очистил свой локальный кеш Chrome, постоянно использую режим инкогнито, и я просто не могу избавиться от этого перенаправления. Я даже использую Firefox, поскольку я редко его использую, поэтому не ожидаю никакого кэширования для domain.com

Я могу быть совершенно не в теме, и это может быть вообще не связано с браузером, а скорее с конфигурацией сервера и nginx. Что-то заставляет 301, и я не знаю, что.

Кажется, что этот плагин часто обсуждается, но насколько я могу сказать, это применимо только в том случае, если вы хотите сопоставить обычный домен с поддоменом, чего я не хочу.

Может ли кто-нибудь предложить какие-либо советы/решения относительно того, как я могу настроить, чтобы все было правильно маршрутизировано? В моей локальной среде работает стек LAMP, поэтому у меня это работает, и я изменил файл wp-config.php, чтобы отразить новый «живой» домен (помните, я не настроил DNS, я только что взломал etc/hosts.

Любая помощь очень ценится, как всегда :)


person Andrew David Tanner    schedule 20.10.2015    source источник


Ответы (2)


Единственное, что позволяет избежать обслуживания вашего запроса «запасным» виртуальным хостом по умолчанию (то есть «первым»), — это директива server_name.

Простое указание блоков location в нескольких блоках server с одинаковым (или без) server_name не приведет к их волшебному совпадению.

Однако вы можете использовать имена серверов регулярных выражений.

Узнайте, как это сделать.

Для конкретного случая только с одним доменом вы можете использовать

server_name *.whatever.com;

затем сопоставьте location с return 301 http://whatever.com; только для субдоменов. Таким образом, вам не понадобятся имена серверов регулярных выражений.

Обратите внимание, что вы должны указать имя_сервера в качестве сервера по умолчанию, например

server_name "_";

person Victor - Reinstate Monica    schedule 20.10.2015
comment
К сожалению, Regex (или администрирование сервера) не являются для меня сильной стороной. Можете ли вы предложить какую-либо дополнительную помощь, пожалуйста? Мне удалось удалить 301, и теперь я застрял в 302. - person Andrew David Tanner; 22.10.2015
comment
Конечно, но каковы ваши текущие успехи? Кстати, WordPress не может управлять 301/www на nginx, а только через apache .htaccess. - person Victor - Reinstate Monica; 22.10.2015
comment
Всего у вас должен быть серверный блок с server_name domain.com, один другой с server_name www.domain.com и еще по одному на каждый субдомен, то есть subX.domain.com. Обычно это означает отдельные файлы (5 для 3 поддоменов) в /etc/nginx/sites-available и соответствующие символические ссылки в /etc/nginx/sites-enabled. - person Victor - Reinstate Monica; 22.10.2015
comment
Спасибо, Виктор. Я попробую это как можно скорее. - person Andrew David Tanner; 23.10.2015

Поэтому в конце концов я решил создать мультисайт с нуля в своей среде nginx, а не пытаться взять то, что работало в Apache, и перенастроить для nginx. Насколько я могу судить, я обновил все, что вы ожидаете сделать, с Apache на nginx, а также обновил локальные домены до действующих в базе данных и wp-config.

Хотя этот подход не совсем «решил» мою проблему, я чувствую, что усвоил здесь ценный урок — иногда лучше начать с нуля, чем пытаться что-то подогнать!

person Andrew David Tanner    schedule 25.10.2015