Ho la direttiva nginx location
che ha lo scopo di "rimuovere" il prefisso di localizzazione dall'URI per la direttiva proxy_pass
.Nginx - codifica (normalizzazione) parte di URI
Ad esempio, per rendere URI http://example.com/en/lalala uso proxy_pass http://example.com/lalala
location ~ '^/(?<locale>[\w]{2})(/(?<rest>.*))?$' {
...
proxy_pass http://example/$rest;
...
}
questo modo la variabile rest
viene decodificato quando passato a proxy_pass directeve. Sembra essere previsto behavior.
Il problema è quando il mio URI contiene spazio codificato %20
passata dal client
http://example.com/lala%20lala
nginx decodifica URI per
http://example.com/lala lala
posso vedere nel mio error.log.
La domanda è: è possibile utilizzare la variabile codificata rest
in qualche modo mentre viene passata dal client? Se sto facendo qualcosa di completamente sbagliato, per favore, suggerisci la strada giusta.
Grazie.
grazie mille. Sapevo di $ request_uri ma la mia attuale conoscenza di nginx non mi permetteva di modificare correttamente l'URI. –
Ricorda che se utilizzi $ request_uri, NON cambierà se viene eseguito un reindirizzamento interno, ad esempio quando viene eseguita una riscrittura o si applica una direttiva error_page. In questi casi, solo $ uri cambia, ma $ uri è già decodificato e quindi non può essere utilizzato come sostituto generico per $ request_uri. –