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
breaky selastcomportan de la manera exacta ...locationcoincidencias)Ejemplo 3: Bloque de ubicación interior - "descanso"
Resultado:
Explicación:
Dentro de un bloque de ubicación, la
breakbandera haría lo siguiente ...locationbloque actualEjemplo 4: Bloque de ubicación interior - "último"
Resultado:
Explicación:
Dentro de un bloque de ubicación, la
lastbandera haría lo siguiente ...rewriteresultado.Resumen:
rewritecondición con la banderabreakolastcoincide, ¡Nginx deja de analizar másrewrites!breakolast, 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 delocationbloque. ¡Nginx también ignora a cualquierarewritesen el nuevolocationbloque!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