# nginx的try_files

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

以指定順序檢查文件是否存在,並使用第一個找到的文件進行請求處理。處理將在當前上下文中執行。指向文件的路徑根據 rootalias 指令從 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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章