语 法:try_files file ... uri;
try_files file ... =code;
默认值:—
上下文:server, location
按指定顺序检查文件是否存在,并使用第一个找到的文件进行请求处理;处理是在当前上下文中执行的。文件的路径是根据 root 和 alias 指令从 file 参数构造的。可以通过在名称末尾指定斜杠来检查目录的存在,例如“$uri/”。如果没有找到任何文件,则内部重定向到最后一个参数中指定的 uri。例如:
location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}最后一个参数也可以指向一个命名位置,如下面的示例所示。从 0.7.51 版本开始,最后一个参数也可以是代码:
location / {
try_files $uri $uri/index.html $uri.html =404;
}代理 Mongrel 的示例:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}Drupal/FastCGI 示例:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
... other fastcgi_param's
}
location @drupal {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
... other fastcgi_param's
}在下面的例子中:
location / {
try_files $uri $uri/ @drupal;
}try_files 指令等效于:
location / {
error_page 404 = @drupal;
log_not_found off;
}和这里
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
...
}try_files 在将请求传递给 FastCGI 服务器之前检查 PHP 文件是否存在。
Wordpress 和 Joomla 的示例:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
... other fastcgi_param's
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
... other fastcgi_param's
}