2012-01-31 23 views
12

Come ottengo il valore di request_uri senza gli argomenti aggiunti alla fine. So che c'è una variabile uri ma ho bisogno del valore originale come La documentazione Nginx:Nginx request_uri senza argomenti

REQUEST_URI

Questa variabile è uguale al originale richiesta URI come ricevuti dal cliente, compresa gli arg. Non può essere modificato. Guarda $ uri per l'URI post-riscrittura/alterato. Non include il nome host. Esempio: "/foo/bar.php?arg=baz"

risposta

10

Stai cercando $ uri. Non ha $ args. In effetti, $ request_uri è quasi equivalente a $ uri $ args.

Se vuoi davvero esattamente $ request_uri con gli argomenti spogliati, puoi farlo.

local uri = string.gsub(ngx.var.request_uri, "?.*", "") 

Avrete bisogno di avere Lua disponibile ma che farà esattamente quello che stai chiedendo.

+5

Ma, come la questione dice, $ uri possono essere modificate da nginx (come quando si verifica un reindirizzamento errore). Quindi, come ottenere la richiesta originale (ad esempio in $ request) ma senza argomenti? –

+0

Questa risposta non è corretta, sebbene il frammento di lua sia corretto. In caso di riscrittura o 'try_files', ecc.' $ Uri' sarà cambiato nel percorso che nginx sta attualmente testando/valutando. –

+0

Stavo creando la mia chiave cache proxy personalizzata, questo era utile. – sdkks

6

Io uso questa mappa, che funziona senza Lua:

map $request_uri $request_uri_path { 
    "~^(?P<path>[^?]*)(\?.*)?$" $path; 
} 
+0

puoi spiegare cosa sta succedendo qui. la prima volta che vedo regex come questo. – sdkks

+1

~ (denota che si tratta di un'espressione regolare)^(ancora all'inizio dell'URL) ((gruppo/acquisizione)? P (Cattura questo gruppo nella variabile $ percorso) [^?] * (0 o più caratteri che non sono " ? ')) (gruppo finale) (\?. *)? (Forse una querystring, a partire da "?" E possibili altri caratteri dopo) $ (anchor end of url) –

+1

Riferimento completo qui: http://nginx.org/en/docs/http/server_names.html#regex_names –

Problemi correlati