Anhängen des URL-Parameters an die Anforderungs-URI mit Nginx

Anhängen des URL-Parameters an die Anforderungs-URI mit Nginx

Ich versuche, URL-Parameter an bestimmte Anforderungs-URIs innerhalb des Serverblocks anzuhängen.

Das habe ich bisher:

if ( $request_uri = "/testing/signup" ) {
    rewrite ^ https://www.example.com/testing/signup?org=7689879&type_id=65454 last;
}

location /testing/ {
    try_files $uri $uri/ /testing/index.php;
}

Dies funktioniert jedoch nur, wenn die ursprüngliche Anforderungs-URI keine eigenen URL-Parameter hat (z. B.www.example.com/testing/signup?abc=hallo) Ich möchte die ursprünglichen URL-Parameter beibehalten und meine eigenen hinzufügen.

Ich habe versucht, den regulären Ausdruck in „if“ zu ändern, ( $request_uri ~* "^/testing/signup" ) {aber das verursacht eine Schleife.

Kann jemand helfen?

**** AKTUALISIEREN ****

Ich habe ein Update durchgeführt, um Folgendes auszuprobieren:

location /testing/ {
    rewrite ^/testing/signup$ /testing/signup?org=1231564 break;
    try_files $uri $uri/ /testing/index.php$is_args$args;
}

Dadurch werden die URL-Parameter nicht übergeben, aber beim Überprüfen der Protokolle kann man sehen, dass sowohl der vorhandene als auch der neue URL-Parameter in der Variable args enthalten sind. Aber wie bekomme ich diese in die GET-Anfrage, damit der Server darauf reagieren kann?

2021/08/03 02:27:07 [notice] 3202#3202: *27 "^/testing/signup$" matches "/testing/signup", client: 146.75.168.54, server: example.com, request: "GET /testing/signup?id=1 HTTP/2.0", host: "www.example.com"
2021/08/03 02:27:07 [notice] 3202#3202: *27 rewritten data: "/testing/signup", args: "org=1231564&id=1", client: 146.75.168.54, server: example.com, request: "GET /testing/signup?id=1 HTTP/2.0", host: "www.example.com"

Antwort1

Willkommen bei ServerFault.

Die VariableAnfrage-URIenthält "vollständige ursprüngliche Anfrage-URI (mit Argumenten)". Deshalb funktionierte eine Anfrage mit vorhandenem Parameter für den ursprünglichen Code nicht. Stattdessen könnten wir verwendenuridas istnormalisiert.

Die Endlosschleife kann behoben werden, indem geprüft wird, ob die erforderlichen Parameter vorhanden sind. Da Nginx keine verschachtelten if-Bedingungen unterstützt, können wir eine andere Logik verwenden.

Der folgende Code würde also funktionieren ...

error_page 418 @goodtogo;

location /testing/ {
    if ($arg_org != "") { return 418; }
    if ($arg_type_id != "") { return 418; }

    if ( $uri = "/testing/signup" ) { rewrite ^ /testing/signup?org=7689879&type_id=65454 redirect; }

    try_files $uri $uri/ /testing/index.php =404;
}

location / {}

location @goodtogo {
    try_files $uri $uri/ /testing/index.php =404;
}

Bitte beachten Sie, dass die ursprünglichen Parameter an unsere manuell hinzugefügten Parameter angehängt werden. Für eine Anfrage wie www.example.com/testing/signup?abc=hellowird die URI also in umgeschrieben www.example.com/testing/signup?org=7689879&type_id=65454&abc=hello.

verwandte Informationen