Ich habe nginx location
Direktive, die Zweck ist "Lokalisierung" Präfix von der URI für die proxy_pass
Direktive zu entfernen.Nginx - Codierung (Normalisierung) Teil der URI
Zum Beispiel machen URI http://example.com/en/lalala Verwendung proxy_pass http://example.com/lalala
location ~ '^/(?<locale>[\w]{2})(/(?<rest>.*))?$' {
...
proxy_pass http://example/$rest;
...
}
Auf diese Weise die rest
Variable dekodiert werden, wenn an proxy_pass directeve weitergegeben. Es scheint ein erwarteter behavior zu sein.
Das Problem ist, wenn meine URI %20
von Client übergeben codierten Raum enthält
http://example.com/lala%20lala
nginx URI decodiert
http://example.com/lala lala
ich es in meinem error.log sehen kann.
Die Frage ist - ist es möglich, kodierte rest
Variablen irgendwie zu verwenden, wie es vom Client übergeben wird? Wenn ich etwas völlig falsch mache, bitte, schlagen Sie den richtigen Weg vor.
Vielen Dank.
vielen Dank. Ich wusste über $ request_uri, aber mein derzeitiges Wissen über nginx erlaubte mir nicht, den URI richtig zu modifizieren. –
Beachten Sie, dass wenn Sie $ request_uri verwenden, IT NICHT ÄNDERN wird, wenn eine interne Umleitung vorgenommen wird, z. B. wenn eine Umschreibung ausgeführt wird oder eine error_page-Direktive angewendet wird. Nur $ uri ändert sich in diesen Fällen, aber $ uri ist bereits dekodiert, so dass es nicht als generischer Ersatz für $ request_uri verwendet werden kann. –