91 nginx
我查看了 nginx 文档,但它仍然让我感到非常困惑。
如何try_files工作?以下是文档中的内容:
尝试文件
语法:try_files path1 [path2] uri
默认值:无
上下文:服务器,位置
可用性: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;
Run Code Online (Sandbox Code Playgroud)
我有index index.php index.html index.htm;。当我访问/urlname,它会尝试检查/path/app/cache/urlname/index.php然后/path/app/cache/urlname/index.html?如果我们忽略一切之后try_files是否可以try_files检查缓存文件夹?我一直在努力,但失败了。
Mar*_*ald 81
try_files 尝试您指定的与定义的根指令相关的文字路径并设置内部文件指针。例如try_files /app/cache/ $uri @fallback;,如果您使用withindex index.php index.html;那么它将按以下顺序测试路径:
$document_root/app/cache/index.php $document_root/app/cache/index.html $document_root$uri 在最终内部重定向到@fallback 命名位置之前。您还可以使用文件或状态代码 ( =404) 作为最后一个参数,但如果使用文件,则它必须存在。
您应该注意,除了最后一个参数之外,try_files 本身不会为任何内容发出内部重定向。这意味着您不能执行以下操作:try_files $uri /cache.php @fallback;因为这将导致 nginx 将内部文件指针设置为 $document_root/cache.php 并为其提供服务,但由于没有发生内部重定向,因此不会重新评估位置,因此它将是作为纯文本。(它使用 PHP 文件作为索引的原因是 index 指令将发出内部重定向)
Cra*_*cks 10
这是 try_files 的另一个方便使用,作为无条件重定向到命名位置。命名位置有效地充当子例程,从而节省了代码重复。当 try_files 的第一个参数是_回退重定向时,总是采用(假设它_不是现有的文件名)。因为 nginx 需要一个goto声明,但没有。
location =/wp-login.php { try_files _ @adminlock; }
location ^~ /wp-admin/ { try_files _ @adminlock; }
location @adminlock {
allow 544.23.310.198;
deny all;
try_files _ @backend;
# wp-admin traffic is tiny so ok to send all reqs to backend
}
location ~ \.php { try_files _ @backend; }
location / { try_files $uri $uri/ =403; }
location @backend {
fastcgi_pass 127.0.0.1:9000;
include snippets/fastcgi-php.conf;
}
Run Code Online (Sandbox Code Playgroud)