我遇到了一个问题,我想为某些目录启用 nginx 的自动索引功能,但这些目录也有自己的索引文件。
所以我想知道是否有办法让 nginx 在不同的路径上提供其自动索引页面。比如/path/to/dir/autoindex.html
我尝试了以下操作:
location ~* ^/path/to/dir/autoindex.html$ {
autoindex on;
autoindex_format html;
try_files /path/to/dir/ =404;
}
但奇怪的是,这只是将我重定向到/path/to/dir/
并显示我的默认索引页。
此外,我想为没有索引页的文件夹保留此功能,以便自动索引的路径始终保持一致。
答案1
nginx 内部重写可能适用于这里:
location /path/autoindex.html {
rewrite ^ /path/ last;
}
location /path {
internal; # This location is only used for internal redirects
autoindex on;
try_files $uri $uri/ =404;
}
location ~ ^/path {
... configure what you want to show with the path
}
答案2
我发现了一个相当不错的解决方案,它巧妙地使用了重定向及其顺序:
server {
# listen directives etc...
root /path/to/web/root/dir;
# Autoindex only shows when nginx can't file its own index files
index xxx;
rewrite ^(?<path>.*)/autoindex\.html$ $path/ last;
rewrite ^(?<path>.*)/$ $path/index.html last;
autoindex on;
# rest of server configuration...
}
唯一的缺点是你不能真正使用index
指令通常支持的多个不同的索引文件。try_files
也会搞砸这一切,因为你需要确保对于<path>/
URI,nginx 找不到任何文件,因此它会显示自动索引。
除了仅提供静态文件的服务器或位置之外,不建议这样做。