nginx的try_files
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
try_files
- | 說明 |
---|---|
語法 | 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;
}
最後一個參數也可以指向一個命名的 location ,如以下示例。從 0.7.51 版本開始,最後一個參數也可以是一個 code
:
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;
...
}
在將請求傳遞給 FastCGI 服務器之前,try_files 將檢查 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
}