nginx子文件夹中的服务索引文件

问题描述 投票:1回答:1

我想从根文件夹提供索引文件,并从根子文件夹提供索引文件。

我的nginx服务器配置看起来如下:

server {

    listen       80;
    server_name  localhost;
    root /data/;
    index  index.html index.htm index.txt;

    location / {
    }

    location /a {
        alias   /data/a/;
    }

}

并且我的目录结构如下:

/data/:
a  index.txt

/data/a:
index.txt

如果然后执行curl localhost,则会得到文件/data/index.txt的内容。但是curl /localhost/a给我一个301curl localhost/a/index.txt有效。

为什么我不能使用curl /localhost/a访问index.txt?

我尝试在root块中使用alias而不是location /a,并且还尝试为位置index.txt指定/a,但没有成功。

我看到类似的帖子,例如Nginx location configuration (subfolders)但找不到答案。

http nginx webserver http-status-code-301 httpserver
1个回答
0
投票

index指令适用于以/结尾的URI:

因此URI /为您提供/index.txt的内容,/a/为您提供`/a/index.txt的内容。

如果为Nginx提供目录的URI(但不带尾随/,默认行为是重定向到相同的URI,但带尾随/

这就是index指令的工作方式。有关详细信息,请参见this document


如果您想要默认行为以外的其他东西,则必须使用try_files手动进行。有关详细信息,请参见this document

例如,要通过提供目录的URI而不以尾随index.txt来返回/文件的内容,请使用:

root /data;

location / {
    try_files $uri $uri/index.txt =404;
}

请注意,在此示例或您所关注的示例中,location /a { ... }块为不必要

© www.soinside.com 2019 - 2024. All rights reserved.