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

evrscar2  于 2023-11-17  发布在  Nginx
关注(0)|答案(1)|浏览(190)

我知道有很多类似的职位在那里,但仍然找不到一个适合我的情况。
我有一个非常简单的位置块,它提供静态HTML文件,但它提供404不是我指定的文件。

  1. location / {
  2. if ($request_uri != /abcd) {
  3. return 500;
  4. }
  5. root /usr/share/nginx/html;
  6. #try_files $uri.html =404;
  7. #try_files index2.html =404;
  8. try_files $uri $uri/ =404;
  9. }

字符串
这是根目录中ls的输出

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


正如你所看到的,有abcd.html和index2.html,但当我设置文件名时,它无法访问并显示404页面。
只有$uri.html可以被解析并显示正确的页面。如果我想为该位置提供静态文件,我应该怎么做?
例如,我想为请求/abcd提供abcd.html,并为其他请求返回500。

xqnpmsa8

xqnpmsa81#

所有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的文件

举例来说:

  1. root /usr/share/nginx/html;
  2. location / {
  3. return 500;
  4. }
  5. location = /abcd {
  6. try_files /index2.html =404;
  7. }

字符串
假设index2.html始终存在,则=404永远不会到达。

展开查看全部

相关问题