/ newsletter /で始まるすべてのパスを正規表現で1つ(/ newsletter/one)を除いて一致させようとしています。これまでのところ:
location ~ ^/newsletter/(.*)$ {
// configuration here
}
これは、/ newsletter /で始まるすべてのパスに一致します。
パス/ newsletter/oneを例外にするにはどうすればよいですか?
私は次の解決策を使用してしまいました:
location ~ ^/newsletter/(.*)$ {
location ~ /newsletter/one(.*) {
// logic here
}
// logic here
}
これは、/ newsletter/*の下のすべてのパスに一致し、次に/ newsletter/oneで始まるすべてのパスに一致し、残りの構成を外部構成に保持しながら、newsletter/oneの構成を内部構成ブロックに適用しますブロック。
これは機能しますが、欠点が1つあります。また、「1」の後に続く文字は一致しません。
location ~ ^/newsletter/(?!one).*$ {
//configuration here
}
しかし、これはより良いかもしれません:
location = /newsletter/one {
// do something (not serve an index.html page)
}
location ~ ^/newsletter/.*$ {
// do something else
}
これは、Nginxが=
location
を使用してリクエストを処理します。 1つの問題は、index
ページを使用している場合、リクエストが内部で書き直され、2番目のlocation
に一致してそれを使用するため、これが一致しないことです。以下を参照してください: https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms#matching-location-blocks
Nginxが使用する場所を選択する方法を説明するセクションがあります。
Varlogtimの解決策を明確にするには、次のように機能します。これにより、_/newsletter/one-time
_に一致させることができますが、_/newsletter/one
_はスキップできます
location ~ ^/newsletter/(?!one$).*$
また、一致で大文字と小文字を区別しない場合は、_~*
_の代わりに_~
_修飾子を使用します
こちらがその1つです。
^/newsletter(/&/[^o][^n][^e])$