我正在尝试从 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