Nginx try_files 指令不提供指定的文件

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

我知道那里有很多类似的帖子,但仍然找不到适合我的情况的帖子。

我有非常简单的位置块,它提供静态html文件,但它提供404而不是我指定的文件。

location / {
    if ($request_uri != /abcd) {
        return 500;
    }

    root /usr/share/nginx/html;
    #try_files $uri.html =404;
    #try_files index2.html =404;
    try_files $uri $uri/  =404;
}

这是根目录中 ls 的输出

50x.html  abcd.html  index.html  index2.html

正如你所看到的,有abcd.html和index2.html,但是当我设置文件名时,它无法访问并显示404页面。

只有

$uri.html
可以解析并显示正确的页面。如果我想为该位置提供静态文件,我该怎么办?

例如,我想为请求

abcd.html
提供服务器
/abcd
并为其他请求返回 500。

nginx nginx-location
1个回答
0
投票

所有 Nginx URI 都包含前导

/

try_files指令的

file
参数需要前导
/
来匹配指定的路径。请参阅
try_files
手册页

$uri
变量已包含前导
/

所以:

  • try_files $uri.html =404;
    匹配文件,因为
    $uri.html
    ==
    /abcd.html
  • try_files index2.html =404;
    与文件不匹配,因为它缺少前导
    /
  • try_files $uri $uri/  =404;
    与文件不匹配,因为没有名为
    abcd
  • 的文件

例如:

root /usr/share/nginx/html;

location / {
    return 500;
}
location = /abcd {
    try_files /index2.html =404;
}

假设

index2.html
始终存在,则
=404
永远不会到达。

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