我看了一下nginx的文档,但仍然把我搞糊涂了
try_files如何工作? 这是文件所说的
来自Nginx的HttpCoreModule
try_files
- 这个nginx错误“重写或内部redirect周期”是什么意思?
- Nginx的 – 根与别名,为单个文件提供服务?
- 订购:1. nginx 2.清漆3. haproxy 4.networking服务器?
- 如何在nginx日志中输出variables进行debugging
- IPv6上基于nginx名称的虚拟主机
语法: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:
$document_root/app/cache/index.php
$document_root/app/cache/index.html
$document_root$uri
最后在内部redirect到@fallback命名的位置。 您也可以使用文件或状态码( =404
)作为最后一个参数,但如果使用文件则必须存在 。
你应该注意到try_files本身不会为最后一个参数发出内部redirect。 意思是你不能做到以下几点: try_files $uri /cache.php @fallback;
因为这将导致nginx将内部文件指针设置为$ document_root / cache.php并提供服务,但是由于没有内部redirect,位置不会被重新评估,因此将作为纯文本提供。 (PHP文件作为索引的原因是索引指令会发出内部redirect)