try_files如何工作?

我看了一下nginx的文档,但仍然把我搞糊涂了

try_files如何工作? 这是文件所说的

来自Nginx的HttpCoreModule

try_files

语法:try_files path1 [path2] uri

默认:无

上下文:服务器,位置

可用性:0.7.27

按顺序检查文件的存在,并返回find的第一个文件。 尾部的斜线表示一个目录 – $ uri /。 在没有find文件的情况下,调用到最后一个参数的内部redirect。 最后一个参数是回退URI并且必须存在,否则会引发内部错误。 与重写不同,如果后退不是一个命名的位置,$ args不会自动保留。 如果你需要保存参数,你必须明确地这样做:

我不明白它是如何检查path,以及如果我不想要一个内部错误,并让它恢复path的其余部分,以努力find另一个文件?

如果我在/path/app/cache/url/index.html有一个caching文件,如果失败,请尝试/path/app/index.php我该如何写? 如果我写了

  try_files /path/app/cache/ $uri include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket; fastcgi_param SCRIPT_FILENAME $document_root/index.php; 

我有index index.php index.html index.htm; 当我访问/urlname它会尝试检查/path/app/cache/urlname (index.php然后) /path/app/cache/urlname /path/app/cache/urlname/index.html ? 如果我们在try_files之后忽略所有的东西,try_files是否可以检查这个caching文件夹? 我一直在尝试和失败。

try_files将尝试相对于定义的根指令指定的文字path,并设置内部文件指针。 如果你使用例如try_files /app/cache/ $uri @fallback; index index.php index.html; 那么它将按以下顺序testingpath:

  1. $document_root/app/cache/index.php
  2. $document_root/app/cache/index.html
  3. $document_root$uri

最后在内部redirect到@fallback命名的位置。 您也可以使用文件或状态码( =404 )作为最后一个参数,但如果使用文件则必须存在

你应该注意到try_files本身不会为最后一个参数发出内部redirect。 意思是你不能做到以下几点: try_files $uri /cache.php @fallback; 因为这将导致nginx将内部文件指针设置为$ document_root / cache.php并提供服务,但是由于没有内部redirect,位置不会被重新评估,因此将作为纯文本提供。 (PHP文件作为索引的原因是索引指令发出内部redirect)