nginx中的try_files指令解释

try_files 指令的官方介绍比较让人摸不着头脑,经网上一番总结查看,try_files最核心的功能是可以替代rewrite。

try_files

语法: try_files file ... uri    或  try_files  file ... = code

默认值: 无

作用域: server location

Checks for the existence of files in order, and returns the first file that is found. A trailing slash indicates a directory - $uri /. In the event that no file is found, an internal redirect to the last parameter is invoked. Do note that only the last parameter causes an internal redirect, former ones just sets the internal URI pointer. The last parameter is the fallback URI and *must* exist, or else an internal error will be raised. Named locations can be used. Unlike with rewrite, $args are not automatically preserved if the fallback is not a named location. If you need args preserved, you must do so explicitly:

try_files $uri $uri/ /index.php?q=$uri&$args;

按顺序检查文件是否存在,返回第一个找到的文件。结尾的斜线表示为文件夹 -$uri/。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数。

务必确认只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。 最后一个参数是回退URI且必须存在,否则将会出现内部500错误。

命名的location也可以使用在最后一个参数中。与rewrite指令不同,如果回退URI不是命名的location那么$args不会自动保留,如果你想保留$args,必须明确声明。

try_files $uri $uri/ /index.php?q=$uri&$args;

实例分析

try_files 将尝试你列出的文件并设置内部文件指向。

例如:

try_files /app/cache/ $uri @fallback; 和  index index.php index.html;

它将检测$document_root/app/cache/index.php,$document_root/app/cache/index.html 和 $document_root$uri是否存在,如果不存在着内部重定向到 @fallback 。

你也可以使用一个文件或者状态码 (=404)作为最后一个参数,如果是最后一个参数是文件,那么这个文件必须存在。

需要明确的是出最后一个参数外 try_files 本身不会因为任何原因产生内部重定向。

例如nginx不解析PHP文件,以文本代码返回

try_files $uri /cache.php @fallback;

因为这个指令设置内部文件指向到 $document_root/cache.php 并返回,但没有发生内部重定向,因而没有进行location段处理而返回文本 。

(如果加上index指令可以解析PHP是因为index会触发一个内部重定向)

转载:

http://www.2cto.com/os/201210/164157.html

.htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php [QSA,L]

在 Nginx 下, 添加以下声明:

    location / {
       try_files $uri $uri/ /index.php;
    }

https://git.oschina.net/os621/ROCBOSS

时间: 2024-10-13 11:59:17

nginx中的try_files指令解释的相关文章

Nginx中常用的指令配置详解

rewrite指令的作用:是做一些访问匹配规则的判断,从而实现相应的操作.location / {proxy_pass http://192.168.1.5if (-d $request_filename) {...........; 这里的意思是访问的如果是一个目录会做如何处理.} if ($host ~* ^www) { proxy_pass http://192.168.1.2; 这里意思是访问的如果是以www开头的会做如何处理. } } location /a {root html;in

Nginx precontent阶段 try_files指令

try_fiels指令 syntax : try_files file ... uri;=code  //可以是多个文件 context : server,location; location /first { try_files /system/xxx.html $uri $uri/index.html @lasturl; #这里尝试找每个路径的文件 如果都找不到文件 则就执行@lashurl 就会返回 下面的location } location @lasturl{ return 200 "

Nginx中的rewrite指令

转自:http://www.76ku.cn/articles/archives/317 rewite.在server块下,会优先执行rewrite部分,然后才会去匹配location块server中的rewrite break和last没什么区别,都会去匹配location,所以没必要用last再发起新的请求,可以留空..location中的rewirte:.不写last和break -    那么流程就是依次执行这些rewriterewrite break -        url重写后,直接

Nginx中的rewrite指令(break,last,redirect,permanent)

rewite 在server块下,会优先执行rewrite部分,然后才会去匹配location块 server中的rewrite break和last没什么区别,都会去匹配location,所以没必要用last再发起新的请求,可以留空 location中的rewirte: 不写last和break - 那么流程就是依次执行这些rewrite 1. rewrite break url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变 2. rewrite

Nginx系列--04HTTP常用指令及常用模块

前言 本篇总结Nginx中HTTP常用指令与一些常用的模块 一. HTTP协议常用指令 1. keepalive_timeout 语法 : keepalive_timeout timeout [header_timeout];解释 : 当第一个参数timeout的值不为零时,开启长连接.什么是长连接?我们知道应用层的HTTP协议使用的四层协议是tcp连接,而tcp连接非常重量级,如果用户请求一次资源就经历一次tcp的三次握手和四次挥手,伤不起呀!所以最好是能够重用TCP连接,用户请求一次资源后T

Nginx中的一些匹配顺序总结

Nginx中经常需要做各种配置,总结如下: 1.server_name配置 nginx中的server_name指令主要用于配置基于名称虚拟主机,同一个Nginx虚拟主机中,可以绑定多个server_name,各个域名用空格隔开即可.如下: server { listen 80; server_name test.com www.test.com; ... ... } 如果server_name有多个,那么通过代码如$_SERVER["SERVER_NAME"]获取的始终将是Nginx

在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解

看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you do not want to process requests with undefined “Host” header lines, you may define a default server that just drops the requests: server { listen 80 de

Nginx的try_files指令和命名location使用实例

Nginx的配置语法灵活,可控制度非常高.在0.7以后的版本中加入了一个try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率. 下面是一个使用实例(螺壳网V0.3的配置): upstream tornado { server 127.0.0.1:8001; } server { server_name luokr.com; return 301 $scheme://www.luokr.com$request_uri; } server {

Nginx之try_files指令

try_files指令 适用范围:server,location try_files指令将会按照给定它的参数列出顺序进行尝试,第一个被匹配的将会被使用,它经常被用于从一个变量去匹配一个可能的文件,然后将处理传递到一个命名location, 如下示例 location / { try_files $uri $uri/ @INDEX; } location @INDEX { proxy_pass http://appserver; } 在这里有一个隐含的目录索引,如果给定的URI作为一个文件没有被找