Je ne comprends pas la différence entre break et last (drapeaux de réécriture). La documentation est plutôt abstruse. J'ai essayé de basculer entre les deux dans certaines de mes configurations, mais je ne remarquais aucune différence de comportement. Quelqu'un peut-il s'il vous plaît expliquer ces drapeaux plus en détail? De préférence, avec un exemple qui présente un comportement différent lors du basculement d’un drapeau à un autre.
45
Réponses:
Vous pouvez avoir différents ensembles de règles de réécriture pour différents emplacements. Lorsque le module de réécriture se réunit
last
, il arrête le traitement de l'ensemble actuel et la demande de réécriture est transmise à nouveau pour rechercher l'emplacement approprié (et le nouvel ensemble de règles de réécriture). Si la règle se termine parbreak
, la réécriture s’arrête également, mais la demande de réécriture n’est pas transmise à un autre emplacement.Autrement dit, s'il y a deux emplacements: loc1 et loc2, et qu'il existe une règle de réécriture dans loc1 qui modifie loc1 en loc2 ET se termine par
last
, la demande sera réécrite et transmise à l'emplacement loc2. Si la règle se termine parbreak
, elle appartiendra à l'emplacement loc1.la source
OP a préféré un exemple. En outre, ce que @minaev a écrit n'était qu'une partie de l'histoire! Alors on y va ...
Exemple 1: aucun drapeau (pause ou dernier)
Résultat:
Explication:
Pour
rewrite
, les drapeaux sont optionnels!Exemple 2: bloc d'emplacement extérieur (pause ou dernier)
Résultat:
Explication:
En dehors du bloc d'emplacement, les deux
break
etlast
se comportent de la manière exacte ...location
correspondance)Exemple 3: Bloc de localisation interne - "pause"
Résultat:
Explication:
Dans un bloc d'emplacement,
break
flag ferait ce qui suit ...location
bloc actuelExemple 4: bloc de lieu intérieur - "dernier"
Résultat:
Explication:
Dans un bloc d'emplacement,
last
flag ferait ce qui suit ...rewrite
résultat.Sommaire:
rewrite
condition avec le drapeaubreak
oulast
correspond, Nginx cesse d'analyser plusrewrites
!break
oulast
, Nginx effectue le même travail (cesse de traiter les conditions de réécriture).break
, Nginx n'interrompt que le traitement des conditions de réécriturelast
, Nginx arrête de traiter les conditions de réécriture et commence ensuite à rechercher une nouvelle correspondance delocation
bloc! Nginx en ignore également tous les élémentsrewrites
dans le nouveaulocation
bloc!Note finale:
J'ai manqué d'inclure quelques cas supplémentaires (problème courant avec les réécritures, tel que
500 internal error
). Mais ce serait hors de portée de cette question. Probablement, l'exemple 1 est également hors de propos!la source