nginx rewrite 修改参数

nginx rewrite 修改参数

我正在尝试为外部 API 创建 JSON/JSONP 代理。这是我目前的配置:

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

你读过吗if 是邪恶的

它仍然只返回没有包装器的 JSON。

这里的包装器是什么?第一个/第二个,还是两者兼而有之?

编辑:

我会进行简单的调试来测试,看看你的正则表达式是否有效(增加日志级别来查看发生了什么)(解决方案尚未测试)

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


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

        location /testurl  {
           return 200;
        }


}

完成此步骤后,我将输入第二个 IF 语句,如果有效,则第一个语句最终

你的 URL 和回调参数看起来怎么样?

相关内容