次のサーバー構成があります。
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;
}
}
ディレクトリインデックスをロードまたは自動生成する場合は、try_files
内のディレクトリもチェックする必要があります。
try_files $uri.ics $uri $uri/ =404;
名前の末尾にスラッシュを指定することで、ディレクトリの存在を確認できます。例:
$uri/
つまり、$uri
は「指定されたパスでファイルを試す」ことを意味し、$uri/
は「directoryat the指定されたパス」、後者はそのディレクトリの自動インデックス作成を開始する原因です。