语 法: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 }