web-dev-qa-db-ja.com

nginxtry_filesとautoindexを一緒に使用する

次のサーバー構成があります。

server {
    listen 80;
    server_name _;

    root /var/www/;

    location /calendars/ {
        autoindex on;
        try_files $uri.ics $uri =404;
    }
}

http://example.com/calendars/にアクセスしたときにautoindexページが表示されると予想される場合でも、代わりに404 File not foundエラーが発生します。

サーバーに次のような擬似コードを実行させたい:

if($uri is directory) {
    if(one of index pages exists in directory) {
        show index page;
    } else {
        show autoindex page;
    }
} else {
    if($uri.ics exists) {
        show $uri.ics;
    } else if($uri exists) {
        show $uri;
    } else {
        show 404 page;
    }
}
2
Tyilo

ディレクトリインデックスをロードまたは自動生成する場合は、try_files内のディレクトリもチェックする必要があります。

try_files $uri.ics $uri $uri/ =404;

try_filesディレクティブのドキュメント

名前の末尾にスラッシュを指定することで、ディレクトリの存在を確認できます。例: $uri/

つまり、$uriは「指定されたパスでファイルを試す」ことを意味し、$uri/は「directoryat the指定されたパス」、後者はそのディレクトリの自動インデックス作成を開始する原因です。

7
Michael Hampton