在不同的路径下提供 nginx 的自动索引服务

在不同的路径下提供 nginx 的自动索引服务

我遇到了一个问题,我想为某些目录启用 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 找不到任何文件,因此它会显示自动索引。

除了仅提供静态文件的服务器或位置之外,不建议这样做。

相关内容