【问题标题】:nginx serve index file from subfoldersnginx 从子文件夹中提供索引文件
【发布时间】:2020-06-10 07:58:45
【问题描述】:

我想提供来自根文件夹的索引文件和来自根文件夹的子文件夹。

我的 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?

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

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

【问题讨论】:

  • 我看到当我第一次调用curl localhost/a/index.txt,然后马上调用curl localhost/a 时,它可以工作,但是 nginx 似乎又忘记了这一点,我得到了 301。
  • 我不确定我是否正确,但您为什么要尝试为相同的 uri ex 创建别名:如果您浏览 /a,它将自动浏览 a 子文件夹并提供索引。 txt 在这种情况下不需要别名!

标签: http nginx webserver http-status-code-301 httpserver


【解决方案1】:

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 { ... }不是必需的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2017-12-16
    • 2013-07-12
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多