try_files如何工作?

Modified on: Wed, 13 Nov 2019 12:40:02 +0800

我查看了nginx文档,它仍然让我感到困惑。

try_files如何运作?以下是文档说的内容:

来自NginxHttpCoreModule

  

try_files

  
  

语法:try_files path1 [path2] uri

  
  

默认值:无

  
  

context:server,location

  
  

可用性:0.7.27

  
  

按顺序检查文件是否存在,并返回第一个文件
  找到了。尾部斜杠表示目录 - $ uri /。在里面
  没有找到文件的事件,内部重定向到最后一个
  参数被调用。最后一个参数是后备URI和
  必须存在,否则将引发内部错误。与重写不同,如果没有后备,则不会自动保留$ args
  一个命名的位置。如果您需要保留args,则必须这样做
  明确地:

我不明白它如何检查路径以及如果我不想要内部错误但是为了找到另一个文件而让它恢复路径的其余部分该怎么办?

如果我想在/path/app/cache/url/index.html尝试缓存文件,如果它无法尝试/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/index.html?如果我们在try_files之后忽略了所有内容,那么try_files是否可以检查缓存文件夹?我一直在努力并且失败了。

作者:76484,user274

最佳答案

try_files尝试相对于定义的根指令指定的文字路径,并设置内部文件指针。如果您使用try_files /app/cache/ $uri @fallback;index index.php index.html;,那么它将按此顺序测试路径:< / p>

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

    在最终内部重定向到@fallback命名位置之前。您还可以使用文件或状态代码(=404)作为最后一个参数,但如果使用文件,必须存在

    您应该注意,try_files本身不会为除最后一个参数之外的任何内容发出内部重定向。意思是你不能执行以下操作:try_files $uri /cache.php @fallback;因为这将导致nginx将内部文件指针设置为$ document_root / cache.php并提供服务,但由于没有内部重定向发生的位置不会被重新评估,因此它将作为纯文本提供。 (它使用PHP文件作为索引的原因是索引指令发出内部重定向)


相关问答

添加新评论