Ich versuche, alle Pfade, die mit / newsletter / beginnen, mit Ausnahme eines (/ newsletter / one) mit einem regulären Ausdruck abzugleichen. Was ich bisher habe:
location ~ ^/newsletter/(.*)$ {
// configuration here
}
Dies entspricht allen Pfaden, die mit / newsletter / beginnen.
Wie mache ich eine Ausnahme für den Pfad / Newsletter / einen?
Antworten:
Am Ende habe ich die folgende Lösung verwendet:
Dies stimmt mit allen Pfaden unter / newsletter / * überein, und dann stimme ich mit allen Pfaden überein, die mit / newsletter / one beginnen, und wende die Konfiguration für den Newsletter / one im inneren Konfigurationsblock an, während ich den Rest der Konfiguration in der äußeren Konfiguration behalte Block.
quelle
Dies funktioniert, hat aber einen Fehler. Es stimmt auch nicht mit "Eins" überein, gefolgt von Zeichen.
Dies kann jedoch besser sein:
Dies funktioniert, weil Nginx, wenn es eine genaue Übereinstimmung mit einem findet,
=
diese verwendet,location
um die Anfrage zu bedienen. Ein Problem ist, dass dies nicht übereinstimmt, wenn Sie eineindex
Seite verwenden, da die Anforderung intern neu geschrieben wird und daher mit der zweitenlocation
"besseren" übereinstimmt und diese verwendet wird. Siehe Folgendes: https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms#matching-location-blocksIn einem Abschnitt wird erläutert, wie Nginx den zu verwendenden Speicherort auswählt.
quelle
Um die Lösung von varlogtim zu verdeutlichen, würde Folgendes funktionieren, sodass Sie übereinstimmen und
/newsletter/one-time
trotzdem überspringen können/newsletter/one
location ~ ^/newsletter/(?!one$).*$
Wenn Sie die Groß- und Kleinschreibung in Ihrem Spiel ignorieren möchten, verwenden Sie den
~*
Modifikator anstelle von~
quelle
Hier ist der eine:
quelle