2016-06-12 9 views
2

Ich versuche, eine einfache benutzerdefinierte Umleitung mit Nginx zu implementieren.Wie kann ich mit nginx zu einer benutzerdefinierten URL umleiten?

Incoming Anfrage:

http://localhost:8182/testredirect/?asd=456&aaa=ddd&trueurl=http://example.com/sdd?djdj=55 

Ich möchte HTTP erhalten 302-http://example.com/sdd?djdj=55 umleiten. Ich.e weiter zu irgendetwas nach trueurl Argument.

Ich versuche dies:

location /testredirect/ { 
    rewrite "\&trueurl=(.*)$" $1 redirect; 
} 

Aber das scheint nicht zu funktionieren. Es gibt Fehler 404 zurück. Vermisse ich etwas?

+0

Ich würde versuchen, 'Rewrite "\ & trueurl = http: // $ (. *)" Http: // $ 1 Umleiten von;' statt. 'nginx' verhält sich anders, wenn das zweite Argument' 'rewrite' 'mit' http: // 'oder' https: // ' – grochmal

Antwort

1

Thanks @ richard-smith für die hilfreiche Notiz Query-String. Schließlich landete ich mit dem Follow-up:

location /testredirect/ { 
    if ($args ~* "\&trueurl=http(.*)$") { 
     return 302 http$1; 
    } 
} 
2

Die rewrite regex arbeitet nicht mit dem Abfragezeichenfolgeteil des URI, daher wird Ihr Code niemals übereinstimmen. Der betreffende Parameter wurde jedoch bereits als $arg_trueurl erfasst. Details finden Sie unter this document.

Zum Beispiel:

location /testredirect/ { 
    return 302 $arg_trueurl; 
} 
+0

beginnt. Dies ist sinnvoll, aber leider kann' trueurl' auch nicht-deklarierte Argumente enthalten. Ich muss Query String von Regex analysieren, um alles nach '& trueurl =' zu extrahieren und umleiten. – baldr