web-dev-qa-db-ja.com

Nginxの位置が「等しくない」正規表現

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

私は試した:

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

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

43
Christiaan

nginxdocumentation

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

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

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

location / {
    rewrite ^/(.*) http://example.com/$1 permanent; 
}
68
Ring Ø

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

負の正規表現アサーションを使用:

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

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

正規表現の説明:

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

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

次に、そのロケーションブロック内に移動して処理します。

45
AMB