以下引自官方文档:
syntax: | try_files try_files |
---|---|
Default: | — |
Context: | server , location |
Checks the existence of files in the specified order and usesthe first found file for request processing; the processingis performed in the current context.The path to a file is constructed from thefile
parameteraccording to theroot and alias directives.It is possible to check directory’s existence by specifyinga slash at the end of a name, e.g. “$uri/
”.If none of the files were found, an internal redirect to theuri
specified in the last parameter is made.For example:
location /images/ { try_files $uri /images/default.gif; } location = /images/default.gif { expires 30s; }
The last parameter can also point to a named location,as shown in examples below.Starting from version 0.7.51, the last parameter can also be acode
:
location / { try_files $uri $uri/index.html $uri.html =404; }
Example in proxying Mongrel:
location / { try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel; } location @mongrel { proxy_pass http://mongrel; }
Example for 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 }
In the following example,
location / { try_files $uri $uri/ @drupal; }
the try_files
directive is equivalent to
location / { error_page 404 = @drupal; log_not_found off; }
And here,
location ~ \.php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... }
try_files
checks the existence of the PHP filebefore passing the request to the FastCGI server.
Example for Wordpress and 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 }