Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 022 774 раза!

Форум

Добро пожаловать, Гость!

Nginx redirect

Вопросы по работе с Apache, Nginx, PHP, MySQL, Sendmail и т.д.
GeekHacker
Сообщения: 94
C нами: 1 год 3 мес

Непрочитанное сообщение GeekHacker » 01 фев 2016, 21:33

Привет!

Достался мне в наследство один сайтец.
Мне нужно прописать правила перенаправления в конфиге Nginx.
Цель: избавиться от поддоменов.
Часть запросов, приходящих на поддомены, нужно редиректить в поддиректории, а часть в корневую директорию.

Все мы знаем, что в Nginx запрещены вложенные if-условия. В противном случае проблем бы не было.
В общем, сейчас схематически набросаю то, что я хотел бы получить, если бы вложенные ifЫ были разрешены.
if ($host ~ ^([a-z]+)\.example\.com$ ) {
set $path $1;
if ($document_uri ~ ^/(file1|file2|file3)\.php$ ) {
return 301 http://example.com/$path$request_uri;
}
if ($document_uri ~ ^/id_[0-9]\.php$ ) {
return 301 http://example.com$request_uri;
}
}

Но так сделать нельзя.

Может есть идеи как одновременно сохранить логику и избежать кучи проверок, цепочек перенаправлений и прочей ереси?

Заранее благодарен всем за помощь))

Аватара пользователя
Oops
Сообщения: 48
C нами: 2 года
Откуда: Краснодар
Контакты:

Непрочитанное сообщение Oops » 01 фев 2016, 22:12

Для того что бы избавиться от поддоменов, нужно создать отдельный конфиг и в него прописать
server
{
        listen 80;
        server_name *.example.com; // занимаем все поддомены
        return 301 http://example.com:80$request_uri; // перенаправляем на основной домен
}

GeekHacker
Сообщения: 94
C нами: 1 год 3 мес

Непрочитанное сообщение GeekHacker » 01 фев 2016, 22:47

Это понятно.

Там же должны быть разные редиректы при разных $request_uri. И только если был запрошен поддомен.
Тут не всё так просто.
П.С. Пока решил вопрос усложнением регулярки. В принципе, решение устраивает.

GeekHacker
Сообщения: 94
C нами: 1 год 3 мес

Непрочитанное сообщение GeekHacker » 01 фев 2016, 23:05

Только теперь возникает ещё один вопрос.
Сейчас всё сводится к тому, что я проверяю $host и $document_uri одной регуляркой.
Есть ли какой-то способ передавать в if объединённое значение двух переменных?
Сейчас делаю:
set $host_and_file $host$document_uri;
if ($host_and_file ~ ^([a-z]+)\.example\.com/(?:file1|file2|file3)\.php$ ) {
...
}

А вот такое:
if ($host$document_uri ~ ^([a-z]+)\.example\.com/(?:file1|file2|file3)\.php$ ) {
...
}

Такое не работает.


Вернуться в «Модули и инструменты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость