Rewrite#
El módulo se utiliza para cambiar la URI de la solicitud utilizando expresiones regulares PCRE, devolver redirecciones y seleccionar configuraciones condicionalmente.
Las directivas break, goto, if, return, rewrite y set se procesan en el siguiente orden:
las directivas de este módulo especificadas en el nivel server se ejecutan secuencialmente;
repetidamente:
Cuando se compila desde el código fuente, este módulo
se compila por defecto; puede deshabilitarse con la opción de
compilación --without-http_rewrite_module.
En paquetes e imágenes de nuestros repositorios,
el módulo está incluido en la compilación. Detiene el procesamiento del conjunto actual de directivas del módulo http_rewrite. Si una directiva se especifica dentro de la location, el procesamiento posterior de la solicitud continúa en esta location. Ejemplo: Added in version 1.12.0. Detiene el procesamiento del conjunto actual de directivas del módulo
La redirección a una ubicación con nombre cuenta para el mismo límite de 10
cambios de URI que se aplica cuando se reescribe una URI de
solicitud. Por ejemplo, las solicitudes sin una cookie La condición especificada es evaluada. Si es verdadera, las directivas de este módulo especificadas dentro de las llaves se ejecutan, y a la solicitud se le asigna la configuración dentro de la directiva if. Las configuraciones dentro de las directivas if se heredan del nivel de configuración anterior. Advertencia Aunque las directivas de otros módulos pueden usarse dentro del bloque if,
esto no se recomienda,
ya que puede conducir a un comportamiento inesperado. Una condición puede ser cualquiera de las siguientes: un nombre de variable; falso si el valor de una variable es una cadena vacía o "0"; comparación de una variable con una cadena usando los operadores "=" y "!="; coincidencia de una variable con una expresión regular usando los operadores "~" (para coincidencias sensibles a mayúsculas y minúsculas) y "~*" (para coincidencias insensibles a mayúsculas y minúsculas). Las expresiones regulares pueden contener capturas que se ponen a disposición para su posterior reutilización en las variables $1..$9. Los operadores negativos "!~" y "!~*" también están disponibles. Si una expresión regular incluye los caracteres "}" o ";", toda la expresión debe estar encerrada entre comillas simples o dobles. comprobación de la existencia de un archivo con los operadores "-f" y "!-f"; comprobación de la existencia de un directorio con los operadores "-d" y "!-d"; comprobación de la existencia de un archivo, directorio o enlace simbólico con los operadores "-e" y "!-e"; comprobación de un archivo ejecutable con los operadores "-x" y "!-x". Ejemplos: Nota El valor de la variable integrada $invalid_referer es establecido por la directiva valid_referers. Predeterminado — server, location, if Detiene el procesamiento y devuelve el Es posible especificar una URL de redirección (para los códigos 301, 302, 303, 307 y 308) o el texto del cuerpo de la respuesta (para otros códigos). El texto del cuerpo de la respuesta y la URL de redirección pueden contener variables. Como caso especial, una URL de redirección puede especificarse como una URI local a este servidor, en cuyo caso la URL de redirección completa se forma de acuerdo con el esquema de solicitud ($scheme) y las directivas server_name_in_redirect y port_in_redirect. Además, una URL para redirección temporal con el código 302 puede especificarse como único parámetro. Dicho parámetro debe comenzar con la cadena Véase también la directiva error_page. Si la expresión regular especificada coincide con una URI de solicitud, la URI se cambia según lo especificado en la cadena de La cadena de Un parámetro opcional detiene el procesamiento del conjunto actual de directivas del módulo http_rewrite e inicia una búsqueda de una nueva location que coincida con la URI modificada; detiene el procesamiento del conjunto actual de directivas del módulo http_rewrite como con la directiva break; devuelve una redirección temporal con el código 302; se utiliza si una cadena de devuelve una redirección permanente con el código 301. La URL de redirección completa se forma de acuerdo con el esquema de la solicitud ($scheme) y las directivas server_name_in_redirect y port_in_redirect. Ejemplo: Pero si estas directivas se colocan dentro de la ubicación "/download/", la bandera Si una cadena de Si una expresión regular incluye los caracteres "}" o ";", toda la expresión debe estar entre comillas simples o dobles. Habilita o deshabilita el registro de los resultados del procesamiento de las directivas del módulo http_rewrite en el error_log en el nivel notice. Establece un valor para la variable especificada. El valor puede contener texto, variables y su combinación. Predeterminado http, server, location, if Controla si se registran advertencias sobre variables no inicializadas. Las directivas del módulo http_rewrite se compilan en la etapa de configuración en instrucciones internas que se interpretan durante el procesamiento de la solicitud. Un intérprete es una simple máquina virtual de pila. Por ejemplo, las directivas se traducirán en estas instrucciones: Nótese que no hay instrucciones para la directiva limit_rate, ya que no está relacionada con el módulo La directiva puede reducirse en una instrucción si la primera barra en la expresión regular se coloca dentro de los paréntesis: Las instrucciones correspondientes se verán así:Directivas#
break#
if ($slow) {
limit_rate 10k;
break;
}
goto#
http_rewrite y realiza una redirección interna incondicional a la
ubicación con nombre indicada por el parámetro
name. A diferencia de rewrite, no cambia $uri. El
parámetro debe ser un nombre precedido por @; de lo contrario, la
configuración se rechaza.session pueden enrutarse a
un backend de autenticación dedicado:if ($cookie_session = "") {
goto @auth_backend;
}
location / {
proxy_pass http://backend;
}
location @auth_backend {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
}
if#
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}
if ($request_method = POST) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
return#
return código [texto];return código URL;return URL;código especificado al cliente. El código no estándar 444 cierra una conexión sin enviar una cabecera de respuesta.http://, https:// o "$scheme". Una URL puede contener variables.rewrite#
reemplazo. Las directivas rewrite se ejecutan secuencialmente en el orden de su aparición en el archivo de configuración. Es posible terminar el procesamiento posterior de las directivas usando banderas. Si una cadena de reemplazo comienza con http://, https:// o "$scheme", el procesamiento se detiene y la redirección se devuelve al cliente.reemplazo puede contener variables, incluidas las capturas posicionales $1 a $9.bandera puede ser uno de los siguientes:lastbreakredirectreemplazo no comienza con http://, https:// o "$scheme";permanentserver {
# ...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
# ...
}
last debe ser reemplazada por break, o de lo contrario Angie realizará 10 ciclos y devolverá el error 500:location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
reemplazo incluye nuevos argumentos de solicitud, los argumentos de solicitud anteriores se añaden después de ellos. Si esto no es deseable, colocar un signo de interrogación al final de una cadena de reemplazo evita que se añadan, por ejemplo:rewrite ^/users/(.*)$ /show?user=$1? last;
rewrite_log#
set#
uninitialized_variable_warn#
uninitialized_variable_warn on | off;uninitialized_variable_warn on;Implementación interna#
location /download/ {
if ($forbidden) {
return 403;
}
if ($slow) {
limit_rate 10k;
}
rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break;
}
variable $forbidden
check for zero
return 403
end of code
variable $slow
check for zero
match of regular expression
copy "/"
copy $1
copy "/mp3/"
copy $2
copy ".mp3"
end of regular expression
end of code
http_rewrite. Se crea una configuración separada para el bloque if. Si la condición es verdadera, la solicitud obtiene esta configuración, donde limit_rate es igual a 10k.rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
match of regular expression
copy $1
copy "/mp3/"
copy $2
copy ".mp3"
end of regular expression
end of code