No entiendo la diferencia entre break y last (banderas de reescritura). La documentación es bastante abstrusa. Intenté cambiar entre los dos en algunas de mis configuraciones, pero no pude detectar ninguna diferencia en el comportamiento. ¿Alguien puede explicar estas banderas con más detalle? Preferiblemente con un ejemplo que muestra un comportamiento diferente cuando se voltea una bandera a otra.
45
Respuestas:
Puede tener diferentes conjuntos de reglas de reescritura para diferentes ubicaciones. Cuando se reúne el módulo de reescritura
last
, deja de procesar el conjunto actual y la solicitud reescrita se pasa una vez más para encontrar la ubicación adecuada (y el nuevo conjunto de reglas de reescritura). Si la regla termina conbreak
, la reescritura también se detiene, pero la solicitud reescrita no se pasa a otra ubicación.Es decir, si hay dos ubicaciones: loc1 y loc2, y hay una regla de reescritura en loc1 que cambia loc1 a loc2 Y termina con
last
, la solicitud se reescribirá y pasará a la ubicación loc2. Si la regla termina conbreak
, pertenecerá a la ubicación loc1.fuente
OP prefirió un ejemplo. Además, ¡lo que escribió @minaev fue solo una parte de la historia! Así que, aquí vamos...
Ejemplo 1: sin banderas (interrupción o último)
Resultado:
Explicación:
¡Para
rewrite
, las banderas son opcionales!Ejemplo 2: bloque de ubicación exterior (descanso o último)
Resultado:
Explicación:
Fuera del bloque de ubicación, ambos
break
y selast
comportan de la manera exacta ...location
coincidencias)Ejemplo 3: Bloque de ubicación interior - "descanso"
Resultado:
Explicación:
Dentro de un bloque de ubicación, la
break
bandera haría lo siguiente ...location
bloque actualEjemplo 4: Bloque de ubicación interior - "último"
Resultado:
Explicación:
Dentro de un bloque de ubicación, la
last
bandera haría lo siguiente ...rewrite
resultado.Resumen:
rewrite
condición con la banderabreak
olast
coincide, ¡Nginx deja de analizar másrewrites
!break
olast
, Nginx hace el mismo trabajo (deja de procesar las condiciones de reescritura).break
, Nginx solo deja de procesar las condiciones de reescritura.last
, Nginx deja de procesar las condiciones de reescritura y luego comienza a buscar una nueva coincidencia delocation
bloque. ¡Nginx también ignora a cualquierarewrites
en el nuevolocation
bloque!Nota final:
Olvidé incluir algunos casos más extremos (en realidad, un problema común con reescrituras, como
500 internal error
). Pero eso estaría fuera del alcance de esta pregunta. ¡Probablemente, el ejemplo 1 también está fuera de alcance!fuente