web-dev-qa-db-ja.com

場所でNginx Regexを使用する方法

Webプロジェクトの静的コンテンツは、/ content/imgフォルダーにあります。 URLルールは/ img/{some md5}ですが、フォルダー内の場所:/ content/img/{最初の2桁} /

url:      example.com/img/fe5afe0482195afff9390692a6cc23e1
location: /www/myproject/content/img/fe/fe5afe0482195afff9390692a6cc23e1

このnginxの場所は正しいですが、セキュリティはそれほどではありません(正規表現ではシンボルポイントは適切ではありません)。

        location ~ /img/(..)(.+)$ {
               alias $project_home/content/img/$1/$1$2;
               add_header Content-Type image/jpg;
         }

次の場所はより正確ですが機能しません:

        location ~ /img/([0-9a-f]\{2\})([0-9a-f]+)$ {
               alias $project_home/content/img/$1/$1$2;
               add_header Content-Type image/jpg;
         }

より正確なnginxの場所のエラーを見つけるのに役立ちます。

POSIX BREパターンでは制限量指定子で中括弧をエスケープする必要があり、NGINXはその正規表現フレーバーを使用しません。ここでは、制限量括弧をエスケープしないでください。ただし、括弧を正規表現パターン文字列の一部として渡すことをNGINXに通知する必要があります。

したがって、パターン全体を二重引用符で囲む必要があります。

使用する

location ~ "/img/([0-9a-fA-F]{2})([0-9a-fA-F]+)$"

これが regexデモ です。

現在のシナリオでは、サブパターンを繰り返すだけでよいことに注意してください。

 /img/([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]+)$
      ^^^^^^^^^^^^^^^^^^^^^^^^
7

次のようにロケーション部分を二重引用符で囲んで動作させました:

location ~ "/img/([0-9a-f]{2})([0-9a-f]+)$"

その理由は、Nginxが中括弧を使用して構成ブロックを定義しているため、ロケーションブロックを開いていると考えているためです。

ソース

4
Ricardo