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

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

Я пытаюсь создать прокси 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?

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

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

что это за обертка для вас? первый / второй, если или оба?

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

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

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


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

        location /testurl  {
           return 200;
        }


}

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

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