我知道那里有很多类似的帖子,但仍然找不到适合我的情况的帖子。
我有非常简单的位置块,它提供静态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 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
永远不会到达。