Карта перенаправления Nginx со строкой запроса - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть конфигурация nginx, подобная этой:

map $request_uri $target {
    /test1234 https://www.somedomain.com/new_url?source=stackoverflow$is_args$args;
}

map $request_uri $target_code {
    /test1234 301;
}
server {
    listen 80 default;

    if ($target_code = 301) {
        return 301 $target;
    }
}

Для /test1234 это работает, но если у меня есть /test1234?test=1 или любая строка запроса, то nginx не соответствует этому перенаправлению.Он должен работать для любых параметров.

Есть ли способ установить подстановочный знак для любой строки запроса?

1 Ответ

0 голосов
/ 30 ноября 2018

Во-первых, вы используете переменную $request_uri, которая содержит полный исходный URI запроса с аргументами, поэтому ваша директива map никогда не будет совпадать, когда в запросе есть какие-либо параметры.Вместо этого используйте переменную $uri.

Во-вторых, представьте, что у вас есть запрос http://yourdomain.com/test1234?test=test$target вы получите https://www.somedomain.com/new_url?source=stackoverflow?test=test.Вы можете использовать дополнительную директиву map в своей конфигурации, чтобы избежать этого:

map $is_args $args_prefix {
    ? &;
}

map $uri $target {
    /test1234 https://www.somedomain.com/new_url?source=stackoverflow$args_prefix$args;
}

И наконец, я рекомендую использовать директиву location внутри вашего блока конфигурации server вместо if, дляНапример:

location = /test1234 {
    return 301 $target;
}

Если есть зло !

...