63

locationリストされた場所と等しくないものに応答するNginxで条件 を設定するにはどうすればよいですか?

私は試した:

location !~/(dir1|file2\.php) {
   rewrite ^/(.*) http://example.com/$1 permanent;
}

ただし、リダイレクトはトリガーされません。サーバー構成の残りのルールを使用して、要求された URI を処理するだけです。

4

2 に答える 2

88

nginxのドキュメントによると

正規表現に一致しないための構文はありません。代わりに、ターゲットの正規表現に一致させて空のブロックを割り当て、次に location / を使用して他のものに一致させます

したがって、次のようなものを定義できます

location ~ (dir1|file2\.php) { 
    # empty
}

location / {
    rewrite ^/(.*) http://example.com/$1 permanent; 
}
于 2013-04-30T15:54:52.233 に答える
76

私は同じものを探していました。そしてこの解決策を見つけました。

負の正規表現アサーションを使用します。

location ~ ^/(?!(favicon\.ico|resources|robots\.txt)) { 
.... # your stuff 
} 

場所のソース 否定正規表現

正規表現の説明:

URL が次のパスのいずれとも一致しない場合

example.com/favicon.ico
example.com/resources
example.com/robots.txt

次に、そのロケーション ブロック内に入り、それを処理します。

于 2016-09-17T17:08:28.690 に答える