try_files
将请求的 URI 路径重写为站点根目录中列出的第一个存在的文件。如果没有文件匹配,则不进行重写。
语法
try_files <files...> {
policy first_exist|first_exist_fallback|smallest_size|largest_size|most_recently_modified
}
-
<files...> 是要尝试的文件列表。URI 路径将被重写为第一个存在的文件。
要匹配目录,请在路径后追加尾部斜杠
/。所有文件路径均相对于站点 站点根目录,并且 glob 模式 将会被展开。每个参数也可以包含查询字符串,如果它匹配了相应的文件,则查询字符串也会被更改。
如果
try_policy为first_exist(默认值),则列表中的最后一项可以是以=前缀的数字(例如=404),作为回退将发出该代码的错误;该错误可以被handle_errors捕获并处理。 -
policy 是在文件列表中选择文件的策略。
默认:
first_exist
展开形式
try_files 指令基本上是以下写法的快捷方式:
@try_files file <files...>
rewrite @try_files {file_match.relative}
注意此指令不接受 matcher 令牌。如果你需要更复杂的匹配逻辑,请以上述展开形式为基础进行使用。
有关更多详情,请参阅 file 匹配器。
示例
如果请求不匹配任何静态文件,则重写到你的 PHP 索引/路由入口:
try_files {path} /index.php
同上,但将原始路径添加到查询字符串中(某些旧 PHP 应用需要):
try_files {path} /index.php?{query}&p={path}
同上,同时也匹配目录:
try_files {path} {path}/ /index.php?{query}&p={path}
尝试重写到存在的文件或目录,否则发出 404 错误(该错误可以被 handle_errors 捕获并处理):
try_files {path} {path}/ =404
选择最近部署的静态文件版本(例如当请求 index.html 时,提供 index.be331df.html):
try_files {file.base}.*.{file.ext} {
policy most_recently_modified
}