2012-01-31 11 views
12

¿Cómo obtengo el valor de request_uri sin los argumentos adjuntos en el extremo. Sé que hay una variable uri pero necesito el valor original como los estados de documentación Nginx:Nginx request_uri sin argumentos

request_uri

Esta variable es igual a la originales URI de la solicitud tal como se recibió de el cliente que incluye los args. No puede ser modificado. Mire $ uri para el URI post-reescritura/alterado. No incluye nombre de host. Ejemplo: "/foo/bar.php?arg=baz"

Respuesta

10

usted está buscando $ uri. No tiene $ args. De hecho, $ request_uri es casi equivalente a $ uri $ args.

Si realmente quiere exactamente $ request_uri con los args stripped, puede hacerlo.

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

Deberá tener lua disponible, pero eso hará exactamente lo que está pidiendo.

+5

Pero a medida que la pregunta dice, $ uri pueden ser modificados por nginx (como cuando se produce un error de redirección). Entonces, ¿cómo obtener la solicitud original (como en $ solicitud) pero sin argumentos? –

+0

Esta respuesta es incorrecta, aunque el fragmento de lua es correcto. En el caso de reescrituras o 'try_files', etc.' $ uri' se cambiará a la ruta que nginx está actualmente probando/evaluando. –

+0

Estaba construyendo mi clave de caché de proxy personalizada, esto fue útil. – sdkks

6

Puedo usar este mapa, que funciona sin lua:

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

puede explicar lo que está sucediendo aquí. primera vez que veo expresiones regulares como esta. – sdkks

+1

~ (indica que esta es una expresión regular)^(ancla al comienzo de la url) ((grupo/captura)? P (captura este grupo en la variable $ ruta) [^?] * (0 o más caracteres que no son ' ? ')) (grupo final) (\?. *)? (Tal vez una querystring, comenzando con '?' Y posiblemente más caracteres después de eso) $ (anchor end of url) –

+1

Referencia completa aquí: http://nginx.org/en/docs/http/server_names.html#regex_names –

Cuestiones relacionadas