v2中文文档
项目

try_files

将请求URI路径重写为站点根目录中存在的第一个列出的文件。如果没有文件匹配,则不执行重写。

语法

try_files <files...> {
	policy first_exist|first_exist_fallback|smallest_size|largest_size|most_recently_modified
}
  • <files...> 是要尝试的文件列表。URI路径会被重写为第一个存在的文件。

    要匹配目录,请在路径后追加正斜杠/。所有文件路径都相对于站点root,并且会展开glob模式

    每个参数也可以包含查询字符串;如果匹配到该特定文件,查询字符串也会被更改。

    如果try_policyfirst_exist(默认值),则列表中的最后一项可以是以=为前缀的数字(例如=404),作为后备,它会发出带有该代码的错误;该错误可以用handle_errors捕获和处理。

  • policy 是从文件列表中选择文件的策略。

    默认:first_exist

扩展形式

try_files指令基本上是下面配置的快捷方式:

@try_files file <files...>
rewrite @try_files {file_match.relative}

请注意,此指令不接受匹配器标记。如果需要更复杂的匹配逻辑,请以上面的扩展形式为基础。

更多细节请参见file匹配器

示例

如果请求没有匹配任何静态文件,则重写到你的PHP index/router入口:

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
}