Я видел довольно похожие посты, но не совсем то, что мне нужно. Я пытаюсь реализовать перезапись nginx, которая должна изменить содержимое переменной get. Результат всегда 404 не найдено, и я не могу понять, что не так. В частности, я хочу:
https: //mydomain.tld/resellers/view.php? id = 1 & url = https: //market.tld быть переписано на: https: //resellers.mydomain.tld/view.php? id = 1 & url = 101
Итак, есть 2 модификации:
Конфигурация, которая, как мне кажется, должна работать:
location ~ /resellers {
rewrite ^/resellers/view.php?id=1&url=https://market.tld https://resellers.mydomain.tld/view.php?id=1&url=101;
}
Поскольку будет несколько комбинаций ссылок, касающихся переменных id и url, не лучше ли использовать карты перезаписи? Я имею в виду, что я хочу быть явным при создании правил для переменных id и url и не использовать подстановочные знаки, как в более простых правилах перезаписи.
Я надеюсь, что кто-то был в подобной ситуации раньше, чтобы пролить свет. Спасибо вам большое за ваше время.
Регулярное выражение rewrite
Директива не может соответствовать части аргументов URL-адреса.
Если вы пытаетесь перенаправить один URI, используйте location =
синтаксис. Видеть этот документ для подробностей.
Предполагая, что существует более одного сопоставления для url
параметр, map
хорошее решение. Видеть этот документ для подробностей.
Например:
map $arg_url $new_url {
default 0;
https://market.tld 101;
}
server {
...
location = /resellers/view.php {
if ($new_url) {
return 301 https://resellers.mydomain.tld/view.php?id=$arg_id&url=$new_url;
}
# URL mapping not found - what to do?
return 404;
}
...
}
Обратите внимание, что map
блок расположен за пределами server
контекст.