nginx 如何在 try_files 中处理 =404 回退

2024-02-13

我有一个示例 Web 服务器,www 目录中只有一个 index.html 文件。我可以使用以下配置设置 nginx:

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

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

如果我将配置更改为

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:

我发现别名指令应该以/但仍然没有得到 =404 功能和目的,因为状态仍然是 200ok


The try_files https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files指令仅支持这些语法:

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

它不支持:

try_files file ... uri =code;

和...之间的不同file and uri这里,是为了file参数,NGINX 将检查它们的存在在继续下一个论点之前;为了uri,不会的。

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

由此,你可以得到一个结论:通过请求URI/foo/bar和这个配置:

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

...如果出现以下任一情况,都不会触发 404 错误files exist:

  • /var/www/foo/bar
  • /var/www/foo/bar/目录(如果你有autoindex已启用)
  • /var/www/foo/bar/index.html (or index.php等)(由于值index)

Only当以上都不存在时,NGINX将触发404错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx 如何在 try_files 中处理 =404 回退 的相关文章

随机推荐

  • Jackson - 将内部对象列表反序列化为更高级别的列表

    使用 Spring Boot 和 Jackson 如何将包装 内部列表直接反序列化为外层列表 例如 我有 transaction items item itemNumber 193487654 itemDescription Widget
  • 从 JavaScript 手动触发 iPhone/iPad/iPod 键盘

    我正在开发一个 HTML 代码编辑器 使用简单的 DIV 并捕获事件 当我在 iPad 上使用它时 键盘永远不会弹出 因为从技术上讲我并不处于可编辑字段中 有没有办法以编程方式告诉 iPad 我需要键盘 如果您的代码是通过用户操作启动的某些
  • 将 pop() 与 JavaScript 关联数组结合使用

    我怎样才能在JS中做类似下面的事情 我想模仿 pop 在对象而不是数组上 var deck cardK 13 cardQ 12 cardAJ 11 var val deck pop console log Key val key conso
  • Python 代码块的正则表达式?

    如何创建一个可以匹配行开头以及以 tab 开头的所有以下行的正则表达式 例如 not keyword not this line keyword and random text this line this line and this li
  • 从 CSV 文件创建 ODS 工作表

    我有一组 CSV 文件 需要将其转换为具有多个选项卡式工作表的单个 ODS 甚至 Excel 电子表格 目前我正在使用 python 的 pyexcel 库 但它有很多错误并且速度非常慢 Libreoffice 有一个很好的文件转换实用程序
  • Android:从 Hashmap Arraylist 获取单个值?

    基本上 我有一个使用哈希映射的数据库 运行查询后 我想输出 ID 并将其存储在另一个活动的数组中 之后 我想访问数组中的单个元素 这是我的数据库代码 public ArrayList
  • test_that 与 match.fun 在使用两层深度时会引发意外错误

    我使用时遇到问题match fun和 一起test that when match fun用于嵌套函数内部 为了说明这一点 我构建了一个包含两个函数的快速玩具示例 R 包 后者简单地调用前者 i dont throw error lt fu
  • 当成员也是分层结构时,如何构建类结构?

    我正在构建一个 PHP Web 应用程序 它应该为用户提供订购他与另一个人 组织之间的 ConnectDirect 或文件传输网关 连接的 安装 设置的可能性 连接实现的技术细节并不重要 在应用程序中 它只涉及作为产品的连接 可以订购和管理
  • 手机重启后小部件不显示

    我创建了一个小部件 它工作得很好 直到我重新启动手机 然后小部件不会显示它是不可见的 但如果我按住并单击我可以将它扔进垃圾箱 我有一个从 widgetprovider 中的配置活动调用的函数 它执行以下操作 static void upda
  • 如何通过子进程模块调用 ssh 以便它使用 SSH_ASKPASS 变量

    我正在编写一个使用 SSH 命令的 GUI 我尝试使用 subprocess 模块调用 ssh 并设置 SSH ASKPASS 环境变量 以便我的应用程序可以弹出一个窗口要求输入 SSH 密码 但是 我无法使用给定的 SSH ASKPASS
  • 如何从单个输入获取多个文件输入

    使用 Firefox 和 Chrome 浏览器 我有一个输入文件元素
  • Ruby on Rails - 数组哈希、按列名分组和求和

    我有以下哈希数组 idx gt 1234 账户 gt abde 钱 gt 4 00 order gt 00001 idx gt 1235 account gt abde money gt 2 00 order gt 00001 idx gt
  • 执行程序时的Fortran77参数

    我目前正在做 Fortran77 作业 所以请不要告诉我确切的编码 但请给我一些我想要做什么的提示 使用UNIX终端 我想通过执行来获取传递的参数 program exe parameter 在标准 Fortran77 中你不能 故事结局
  • 在 Ruby 中处理 ARGV,无需 if...else 块

    在一篇关于无条件编程 http michaelfeathers typepad com michael feathers blog 2013 11 unconditional programming html迈克尔 费瑟斯 Michael
  • 在 Ruby 中,为什么 && 工作而 || 工作我的示例代码中没有吗?

    在我的示例代码中 我尝试替换 text 中与 redact 或 redact again 匹配的任何单词 因为这是一个非此即彼的场景 我想 会被使用 事实证明 实际上有效 如果两者或其中之一匹配 它将正确地用 已编辑 一词替换它们 如果找不
  • 在 Facelets 标签内使用 的 EL 变量

    我有一个Home Each Home有一个列表Rooms Each Room有零个或多个Persons 我想统计每个家庭的总人数 但我无法添加新变量来记录任何支持 bean 或实体中的人数 所以我只想通过以下方式在视图中计算它
  • 使用文件系统访问 API (javascript) 重命名/移动文件

    我一直在关注本文 https web dev file system access 允许用户 半 自动将客户端生成的 XML 文件保存到特定的本地文件夹 第三方程序正在监视此文件夹 并将处理其内容并将内容输出到另一个文件中 问题是 从创建文
  • 模型/视图/控制器模型中验证的最佳位置?

    我正在开发一个广泛使用 MVC 设计模式的 PHP 项目 我希望向表单添加验证 并且很好奇验证的正确位置在哪里 由于表单的生成方式 回发数据的验证在视图组件中要简单得多并且重复性更少 让视图验证响应数据是否可以接受 还是应该在控制器甚至模型
  • 为什么我每次都需要source bash_profile

    我已经安装了 Hadoop 每次我想运行它时 首先我必须这样做 source bash profile 否则它不会识别该命令hadoop 这是为什么 我使用的是 OSX 10 8 现在我们已经缩小了问题范围 Run ps p 在命令行中检查
  • nginx 如何在 try_files 中处理 =404 回退

    我有一个示例 Web 服务器 www 目录中只有一个 index html 文件 我可以使用以下配置设置 nginx location subfolder alias data www try files uri uri index htm