nginx 中仅列出父目录的目录列表

nginx 中仅列出父目录的目录列表

我正在尝试从 Apache 切换到 nginx,但我希望能够允许列出父目录(在我的情况下是根目录)的目录仅有的。例如,我想允许在根目录中列出目录,但不想列出任何子目录(即 /somedir)。

答案1

是的。请注意,自动索引默认为关闭,因此您只需在需要列表的文件夹中允许它即可。

server {
    listen   80;
    server_name  example.com
    root   /path/to/root;
    location / {
            index index.php index.html index.htm;
    }
    location /somedir {
           autoindex on;
    }
}

更新

如果您想要启用目录但不启用其子目录的目录列表,则位置会更像这样,使用 = 运算符(完全匹配)。

    location = /somedir {
           autoindex on;
    }

您可能需要处理尾部斜线。我必须尝试一下才能检查。

答案2

诀窍是为/使用正则表达式设置“autoindex on;”,并为每个其他块使用正则表达式(正则表达式优先于简单匹配)。

sudo nano /etc/nginx/sites-available/example.com 

server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

        location ~ ^/$ {
                autoindex on;
                #try_files $uri $uri/ =404;
                autoindex_exact_size off;
                autoindex_format html;
                autoindex_localtime on;
        }

        # blocks every other sub directory
        location ~ ^/.+$ { 
                autoindex off;
                try_files $uri $uri/ =404;
        }

        # overrides block for subdir3 and it's subdirs.
        location ^~ /subdir3/ { 
                autoindex on;
                try_files $uri $uri/ =404;
        }
}

这仅显示顶层的目录列表。其下的所有内容都需要 index.html 或列表中的其他索引文件。/subdir3 除外,它也会显示目录列表,/subdir3 的子目录也是如此。

-注意:其他 autoindex_xxx 选项是可选的。但它们是强烈推荐的。

## After changing directives, be sure to restart your server. (command may vary per your linux distro/OS)
sudo service nginx restart

相关内容