Nginxが特定のディレクトリへのリクエストを処理するようにして、そのパス/ファイルが複数の個別のディレクトリに存在するかどうかを確認します。たとえば、私のディレクトリルートに次のものがあったとします。
_images/siteA/foo.jpg
images/siteB/b/bar.jpg
images/siteC/example.jpg
_
_http://example.com/images/foo.jpg
_でファイルを返す_foo.jpg
_、_http://example.com/b/bar.jpg
_でファイルを返す_bar.jpg
_などを4番目に希望します。
私は次のことを試しましたが、リダイレクトループでロックされるだけです(リダイレクトしないで、実際にそのURLにファイルを提供します)。
_ location /images/ {
try_files /siteA/images/
/siteB/images/
/siteC/images/ =404;
}
_
また、location ~/images/(.*)/
などのキャプチャグループを使用して、URLの末尾に_$1
_を追加してみました。ドキュメントについて少し混乱していて、nginxでこれを実現する方法がわかりません。
正規表現location
を使用して、/images/
に続くURIの部分をキャプチャする必要があります。次に、try_files
を使用して、各サイトプレフィックスを使用する一連のURIをテストします。
例えば:
location ~ ^/images/(.*)$ {
root /path/to/docroot/images;
try_files /siteA/$1 /siteB/$1 /siteC/$1 =404;
}
root
の値を周囲のブロックから継承できます。その場合、パラメーターをtry_files
に適切に調整します。
受け入れられた回答の代わりに、 named location (@my_path
例)他の場所にフォールバックするには、例えば:
location / {
root /etc/nginx/static;
try_files $uri @index;
}
location @index {
root /srv/http;
try_files $uri $uri.html /index.html =404;
}