Я пытаюсь выполнить перенаправление через карты nginx. У меня есть отдельные серверные блоки для отдельных доменов [и их псевдонимов], например:
Каждый в своем файле conf, скажем, например: www.example.fr.conf.
В каждом файле конфигурации сервера я настраиваю перенаправление с помощью карт, поэтому для каждого домена есть карта [перенаправления], например:
include france-redirects.conf;
server {
server_name www.example.fr example.fr;
...
if ($redirect_uri) {
return 301 $redirect_uri;
}
}
файл: france-redirects.conf выглядит так:
map $request_uri $redirect_uri {
~/news https://www.example.com/france/latest-news;
~/about http://www.example.com/france/about;
}
И это работает должным образом: трафик на http://www.example.fr/news перенаправляется на https://www.example.com/france/latest-news
Однако, когда я создаю аналогичные конфигурации для других доменов. Проблема начинается и кажется, что я не могу использовать ту же сигнатуру / аргументы / переменные карты:
map $request_uri $redirect_uri {}
повторяется в других файлах конфигурации сервера. Кажется, что Nginx выбирает первый блок карты [не уверен, в каком порядке] и «подчиняется» только ему. Итак, когда у меня есть:
include netherlands-redirects.conf;
server {
server_name www.example.nl example.nl;
if ($redirect_uri) {
return 301 $redirect_uri;
}
}
с файлом карты [net Netherlands-redirects.conf], например:
map $request_uri $redirect_uri {
~/news https://www.example.com/netherlands/latest-news;
~/about http://www.example.com/netherlands/about;
}
, и я пытаюсь скрутить, чтобы увидеть окончательное перенаправление:
curl -Ls -o /dev/null -w %{url_effective} http://www.example.nl/news
, он вернет что-то вроде:
http://www.example.com/france/latest-news
Я пытаюсь чтобы не объединять все перенаправления в один длинный файл, а разбивать их по доменам. Разве это невозможно, или я ошибаюсь? Надеюсь, мое объяснение имеет смысл. Пожалуйста помоги. Спасибо
map
глобальная директива для всех серверов
блоки. Поэтому вам нужно использовать разные имена переменных. Например,
map $request_uri $redirect_uri_fr {
~/news https://www.example.com/france/latest-news;
~/about http://www.example.com/france/about;
}
map $request_uri $redirect_uri_nl {
~/news https://www.example.com/netherlands/latest-news;
~/about http://www.example.com/netherlands/about;
}
и используйте их соответствующие блоки server
:
include france-redirects.conf;
server {
server_name www.example.fr example.fr;
...
if ($redirect_uri) {
return 301 $redirect_uri_fr;
}
}
include netherlands-redirects.conf;
server {
server_name www.example.nl example.nl;
if ($redirect_uri) {
return 301 $redirect_uri_nl;
}
}