nginx переписать изменить параметр

nginx переписать изменить параметр

Я пытаюсь создать JSON/JSONP proxy для внешнего API. Вот моя конфигурация на данный момент:

server {
        listen          80;
        server_name     api.example.com;
        location /api/ {
                if ( $arg_callback ) {
                        echo_before_body '$arg_callback(';
                        echo_after_body ');';
                }
                if ($args ~ (.*)callback=[^&]*(.*)) {
                        set $args $1$2;
                }
                proxy_pass      http://api.external.com;
                rewrite ^/api/(.*)$ /external/api/$1?api_key=MY_KEY$is_args$args break;
        }
}

Прокси прекрасно работает без callbackпараметров, возвращая допустимый JSON. Однако, когда я включаю callback, он все равно возвращает только JSON без обратного вызова, обернутого вокруг него. Мне нужно удалить параметр callbackперед вызовом внешнего API, потому что он возвращает ошибку, если запрос содержит нераспознанные параметры. Как мне удалить параметр обратного вызова из запроса (если он существует) перед передачей запроса, но по-прежнему использовать его для создания JSONP?

решение1

вы читалиесли это зло?

он по-прежнему возвращает только JSON без оболочки.

какая здесь обёртка для вас? первая/вторая или обе?

РЕДАКТИРОВАТЬ:

Я бы выполнил простую отладку, чтобы проверить, является ли ваше регулярное выражение допустимым (увеличить уровень логирования, чтобы увидеть, что происходит) (решение не проверено)

server {
        listen          80;
        server_name     api.example.com;
        location /api/ {


                rewrite ^/(.*)callback=[^&]*(.*)$ /testurl/$1/$2 last;  
        }

        location /testurl  {
           return 200;
        }


}

после этого шага я бы вставил второй оператор IF - и если это сработает, то первый, наконец,

как выглядит ваш URL с этими параметрами обратного вызова?

Связанный контент