Não entendo a diferença entre break e last (sinalizadores de reescrita). A documentação é bastante obscura. Eu tentei alternar entre os dois em algumas das minhas configurações, mas não consegui detectar nenhuma diferença no comportamento. Alguém pode explicar essas bandeiras com mais detalhes? De preferência com um exemplo que mostra um comportamento diferente ao virar um sinalizador para outro.
45
Respostas:
Você pode ter diferentes conjuntos de regras de reescrita para diferentes locais. Quando o módulo de reescrita se encontra
last
, ele para de processar o conjunto atual e a solicitação reescrita é passada novamente para encontrar o local apropriado (e o novo conjunto de regras de reescrita). Se a regra terminarbreak
, a reescrita também será interrompida, mas a solicitação reescrita não será passada para outro local.Ou seja, se houver dois locais: loc1 e loc2, e houver uma regra de reescrita em loc1 que altere loc1 para loc2 AND termina com
last
, a solicitação será reescrita e transmitida para o local loc2. Se a regra terminar combreak
, ela pertencerá ao local loc1.fonte
O OP preferiu um exemplo. Além disso, o que @minaev escreveu, era apenas uma parte da história! Aqui vamos nos...
Exemplo 1: Nenhum sinalizador (interrupção ou último)
Resultado:
Explicação:
Pois
rewrite
, as bandeiras são opcionais!Exemplo 2: Bloco de localização externo (pausa ou último)
Resultado:
Explicação:
Fora do bloco de localização, ambos
break
elast
se comportam da maneira exata ...location
correspondência)Exemplo 3: Bloco de localização interno - "pausa"
Resultado:
Explicação:
Dentro de um bloco de localização, o
break
sinalizador faria o seguinte ...location
bloco atualExemplo 4: Bloco de localização interno - "last"
Resultado:
Explicação:
Dentro de um bloco de localização, o
last
sinalizador faria o seguinte ...rewrite
resultado.Resumo:
rewrite
condição com a bandeirabreak
oulast
corresponde, o Nginx para de analisar maisrewrites
!break
oulast
, o Nginx faz o mesmo trabalho (para de processar mais as condições de reescrita).break
, o Nginx só para de processar mais condições de reescritalast
, o Nginx para de processar mais as condições de reescrita e começa a procurar uma nova correspondência delocation
bloco! Nginx também ignora qualquer umrewrites
no novolocation
bloco!Nota final:
Eu esqueci de incluir mais alguns casos extremos (problema realmente comum com reescritas, como
500 internal error
). Mas isso estaria fora do escopo desta questão. Provavelmente, o exemplo 1 também está fora do escopo!fonte