Nginx перенаправляет все старые доменные домены на новый
У меня был очень длинный домен, поэтому я решил изменить его на более короткий и более дружественный. Но так как у меня много поддоменов (фактически, у меня есть подстановочный знак поддомена), я хотел сохранить поддомен при изменении только доменной части. Итак, я сделал следующее правило:
server {
listen 80;
server_name ~^(\w+)\.olddomain\.com$;
rewrite ^ $scheme://$1.doma.in$request_uri? permanent;
}
Я прочитал много других вопросов, где этот фрагмент решил проблему. Но со мной Nginx всегда перенаправляет на .domain.in
без каких-либо поддоменов. Что мне не хватает? Я протестировал регулярное выражение с регулярным выражением regex101, и примеры работают нормально, кажется, Nginx не может его перенаправить.
1 ответ
Начиная с nginx 0.8.25 именованные захваты могут использоваться в server_name. Вы должны использовать их.
Здесь субдомен будет храниться в переменной с именем $sub
, Тогда вы сможете повторно использовать его в rewrite
директива:
server {
listen 80;
server_name ~^(?<sub>\w+)\.olddomain\.com$;
rewrite ^ $scheme://$sub.doma.in$request_uri? permanent;
}
В качестве альтернативы, вы можете оставить свой текущий Regex и использовать $1
в return
директива:
server {
listen 80;
server_name ~^(\w+)\.olddomain\.com$;
return 301 $scheme://$1.doma.in$request_uri;
}
Наконец, обратите внимание, что return
директива - лучший подход для перенаправления. Вы можете столкнуться с ловушками, используя rewrite
для перенаправления.