Назад | Перейти на главную страницу

Перезапись и изменение содержимого переменной Nginx GET

Я видел довольно похожие посты, но не совсем то, что мне нужно. Я пытаюсь реализовать перезапись 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 модификации:

  1. mydomain изменяется на resellers.mydomain
  2. содержание URL изменится на числовое

Конфигурация, которая, как мне кажется, должна работать:

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 контекст.