Nginx的配置語法靈活,可控制度非常高。在0.7以後的版本中加入了一個try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率。
try_files指令:
語法:try_files file ... uri 或 try_files file ... = code
默認值:無
作用域:server location
如下例:
當用戶在瀏覽器輸入blog.zsc.com或者blog.zsc.com/index.html或者blog.zsc.com/index.php時,根據try_files規則,可以找到該域名對應的web頁面;
當用戶在瀏覽器輸入blog.zsc.com/fjdklfjaldkfjlads/zjklfjdslfjds等不存在的域名時,根據try_files規則,“$uri”和“$uri”都不符合,所以nginx就自動把域名轉換爲blog.zsc.com/index.php,然後將blog.zsc.com/index.php頁面內容反饋給客戶端。
try_files的作用是按順序檢查文件是否存在,返回第一個找到的文件或文件夾(結尾加斜線表示爲文件夾),如果所有的文件或文件夾都找不到,會進行一個內部重定向到最後一個參數。
需要注意的是,只有最後一個參數可以引起一個內部重定向,之前的參數只設置內部URI的指向(如下圖)。最後一個參數是回退URI且必須存在,否則會出現內部500錯誤。命名的location也可以使用在最後一個參數中。與rewrite指令不同,如果回退URI不是命名的location那麼$args不會自動保留,如果你想保留$args,則必須明確聲明。
將try_files的最後一個參數設置爲@tornado(@,內部重定向時會用到),當“$uri”找不到時,就做一個內部重定向,將請求拋給“location @tornado”。