nginx rewrite ändern Parameter

nginx rewrite ändern Parameter

Ich versuche, einen JSON/JSONP-Proxy für eine externe API zu erstellen. Hier ist meine bisherige Konfiguration:

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;
        }
}

Der Proxy funktioniert ohne callbackParameter einwandfrei und gibt gültiges JSON zurück. Wenn ich jedoch das einschließe callback, gibt es trotzdem nur JSON ohne den darum gewickelten Rückruf zurück. Ich muss den callbackParameter entfernen, bevor ich die externe API aufrufe, da sie einen Fehler zurückgibt, wenn die Anfrage nicht erkannte Optionen enthält. Wie kann ich den Rückrufparameter aus der Anfrage entfernen (falls er existiert), bevor ich die Anfrage weitergebe, ihn aber trotzdem zum Erstellen des JSONP verwenden?

Antwort1

hast du gelesenwenn es böse ist?

es gibt immer noch nur JSON ohne Wrapper zurück.

was ist hier für dich der Wrapper? das erste/das zweite IF oder beide?

BEARBEITEN:

ich würde ein einfaches Debugging durchführen, um zu testen, ob Ihr regulärer Ausdruck gültig ist (erhöhen Sie die Protokollebene, um zu sehen, was passiert) (Lösung ist ungetestet)

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


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

        location /testurl  {
           return 200;
        }


}

nach diesem Schritt würde ich die zweite IF - Anweisung einfügen, und wenn das funktioniert, die erste schließlich

wie sieht Ihre URL mit diesen Rückrufparametern aus?

verwandte Informationen