nginx中的try_files指令解释
try_files 指令的介绍比较让人摸不着头脑,经网上一番总结查看,try_files最核心的功能是可以替代rewrite。
try_files
语法: try_files file ... uri 或 try_files file ... = code
默认值: 无
作用域: server location
1 |
try_files $uri $uri/ /index.php?q=$uri&$args; |
按顺序检查参数列出的文件是否存在,返回第一个找到的文件。结尾有斜线的 $uri/ 表示文件夹。如果所有的文件都找不到,会发生一个内部重定向到最后一个参数。
只有最后一个参数可以引起内部重定向,之前的参数只能设置为文件或文件夹。
最后一个参数是前面列出的文件或文件夹都不存在时的兜底回调,如果这个路径不存在,将会返回500错误。
最后一个参数也可以是命名的location。与rewrite指令不同,如果回调URI不是命名的location那么$args不会自动传递,如果你想保留$args,必须明确声明参数。
实例分析
1 2 |
index index.php index.html; try_files /app/cache/ $uri @fallback; |
它将检测
$document_root/app/cache/index.php
,$document_root/app/cache/index.html
和 $document_root$uri
是否存在,如果都不存在则内部重定向到@fallback 。
也可以使用一个文件或者状态码 (=404
)作为最后一个参数,如果是最后一个参数是文件,那么这个文件必须存在。
除最后一个参数外 try_files 不会产生内部重定向。
nginx不解析PHP文件,直接返回php代码文本的原因
1 |
try_files $uri /cache.php @fallback; |
因为这个指令设置内部文件指向到 $document_root/cache.php,并且这个文件存在,nginx会直接返回文件内容。 只有最后一个参数才会内部重定向,然后继续执行location段其它指令处理php。
(如果加上index指令可以解析PHP是因为index会触发一个内部重定向)
http://127.0.0.1/index.php?r=home/forward&ur=/
可以吧,把host换成想访问的主机就可以了把
666
已经明白一些了。谢谢分享。
内部重定向指的是本机吗 能不能重定向到远端主机?
好像还是没太明白