当前位置: 首页 > 知识库问答 >
问题:

如何在try\u文件中使用nginx process=404回退

杨豪
2023-03-14

我有一个例子网络服务器只有一个index.html文件在www目录。我可以设置一个nginx与以下配置:

location /subfolder {
     alias /data/www;
     try_files $uri $uri/ /index.html;
}

在浏览器中,我可以在本地域test.local/subfolder上看到正确的响应,也test.local/subfolder/something返回默认的nginx页面(这是正常的,因为根没有设置)

如果我将配置更改为

location /subfolder {
     alias /data/www;
     try_files $uri $uri/ /index.html =404;
}

test.local/subfolder的响应仍然正确,但是test.local/subfolder/something和 /subfolder前缀的所有URI返回index.html正确的响应状态也是200不是404。如果我删除/index从try_files我得到相同的结果

我想知道nginx如何处理请求=404回退,但找不到任何信息,甚至在官方文档中也没有。

UDAPTE:

我发现alias指令应该以/结尾,但仍然无法获得a=404的功能和用途,因为状态仍然是200ok

共有2个答案

荆哲
2023-03-14

您应该定义服务器的根,然后是默认索引,然后将=404添加到try_files

server {
  server_name example.com;
  root /var/www/html/example.com;
  index index.html index.htm index.php;
  # This is optional - if you want a customized 404 error page
  error_page 404 /404.html;

  location /subfolder {
    try_files $uri $uri/ =404;
  }
}

rootalias之间的区别在于root附加location以获取文件系统中的绝对路径,而alias排除location。例如,当您尝试获取http://example.com/subfolder/filename.txt

server_name example.com;
root /var/www/html/example;

location /subfolder {
  try_files $uri $uri/ =404;
}

将返回/var/www/html/example/subfolder/filename的内容。txt(如果存在)而

server_name example.com;

location /subfolder {
  alias /var/log;
  try_files $uri $uri/ =404;
}

返回/var/log/filename的内容。txt(如果存在)

百里业
2023-03-14

try\u files指令仅支持以下语法:

try_files file ... uri;
try_files file ... =code;

它不支持:

try_files file ... uri =code;

这里的fileuri之间的区别在于,对于file参数,NGINX将在继续下一个参数之前检查它们是否存在;对于uri,它不会。

如果最后一个参数的形式为=code,那么它前面的所有参数都是文件s(检查是否存在)。

由此,您可以得出结论,使用请求URI/foo/bar和此配置:

root /var/www;
location /foo/ {
  try_files $uri $uri/ =404;
}

... 如果存在任何文件s,则不会触发404错误:

  • /var/www/foo/bar
  • /var/www/foo/bar/目录(如果启用了autoindex
  • /var/www/foo/bar/index.html(或index.php等)(由于index的值)

只有当以上都不存在时,NGINX才会触发404错误。

 类似资料:
  • 本文向大家介绍如何在JDBC中使用try-with-resources?,包括了如何在JDBC中使用try-with-resources?的使用技巧和注意事项,需要的朋友参考一下 每当我们实例化并使用某些对象/资源时,都应显式关闭它们,否则有可能发生资源泄漏。 通常,我们使用finally资源使用close资源作为- 从JSE7开始,引入了try-with-resources语句。在这种情况下,我

  • 问题内容: 我有一种使用JDBC从数据库中获取用户的方法: 我应该如何使用来改进此代码? 我已经尝试使用下面的代码,但是它使用了很多块,并且并没有太大地提高可读性。我应该以其他方式使用吗? 问题答案: 在你的示例中,无需进行外部尝试,因此你至少可以从3降为2,并​​且也不需要在资源列表的末尾关闭。使用两个try块的优点是所有代码都在前面显示,因此你不必引用单独的方法:

  • 我试图发送一个体在后请求在一个springboot应用程序使用Rest模板。这里是控制器:(我删除了,因为我使用了头) 我想发送对象(lang,key和text)作为帖子请求中的正文,以获得mcResent: 公共mc响应parseTheSentiments(字符串文本,语言lang,字符串键)抛出异常{ } 但是,我得到了以下错误:404null。 你能帮帮我吗?提前感谢,以下是服务等级:

  • 问题内容: 我有一个档案 用户来 我希望用户的浏览器开始下载文件。我怎么做?readfile是否在服务器上打开文件,这似乎是不必要的事情。有没有一种方法可以在不打开服务器的情况下返回文件? 问题答案: 我想你想要这个:

  • 本文向大家介绍如何在PHP中回显XML文件,包括了如何在PHP中回显XML文件的使用技巧和注意事项,需要的朋友参考一下 在PHP包装程序的帮助下,HTTP URL可以像本地文件一样使用。可以通过file_get_contents()来获取URL中的内容,并且可以将其回显。或使用readfile函数读取。 以下是执行相同操作的示例代码- 下面展示了一个替代方案- 也可以使用asXML方法。以下是示例