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

Я пытаюсь создать прокси JSON/JSONP для внешнего 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;
        }


}

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

как выглядит ваш URL с этими callback-параметрами?

Другие вопросы по тегам