解釋try_files $uri $uri/ /index.php$is_args$args;

nginx 裏邊 try_files的用法
核心作用:可以替代rewrite
作用域: server 、location
沒有默認值

語法: try_files 【$uri 】 【 $uri/ 】 參數
如:
try_files $uri $uri/ /index.php$is_args$args 或 try_files $uri $uri/ = 404

$uri 是請求文件的路徑
$uri/ 事請求目錄的路徑

參數: $uri
解釋: 表示當前請求的URI,不帶任何參數
訪問: curl http://test.wanglei.com/192.168.1.200?a=10 -I
返回: "/192.168.1.200"

原理:
(1)、當location匹配到以後,如 www.123.com/example 配置爲 try_files $uri = 404
他只會在發佈目錄裏邊着examplt這個文件,(因爲你只配置了$uri)

(2)、當你訪問 www.123.com/example 配置爲 try_files $uri/ = 404 他會在發佈目錄裏邊尋找example 這個目錄,(因爲只配置了$uri/ )

(3)、當你的配置爲 try_files $uri $uri/ = 404 ,訪問 www.123.com/example 的時候 會先在發佈目錄裏邊找example這個文件,如果沒有的話 就在尋找example這個目錄。在try_files 尋找完以後不會跳出location,而是往下執行,如果後邊沒有需要執行的,就會返回給客戶端

(4)、當try_files 找不到文件時,內部會將這次請求重定向到最後一個參數,所以最後一個參數必須存在, try_files $uri $uri/ = 404 這個配置,當你訪問 www.123.com/example 時找不到example文件或目錄的時候,就會重定向到最後一個參數,就是 =404 ,當然也可以指向到其他的location,等等

(5)、/index.php$is_args$args

$is_args 解釋: 表示請求中的URL是否帶參數,如果帶參數,$is_args值爲"?"。如果不帶參數,則是空字符串 訪問: curl http://test.wanglei.com/192.168.1.200?a=10 -I 返回: "?"
訪問: curl http://test.wanglei.com/192.168.1.200 -I 返回: ""

參數: $args -----只接收參數
解釋: HTTP請求中的完整參數。
訪問: curl http://test.wanglei.com/192.168.1.200?a=10 -I
返回: "a=10"

有參數的話 就變成了 /index.php?a=10 //這樣就能訪問了。

現在解釋自己的配置:如下

server{
listen 80;
server_name example.123.cn;
index index.html index.htm index.php;
root /alidata/txall/callback/web;

location / {
root /alidata/txall/123/web;
index index.html index.php index.htm;
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

定義到了 /alidata/txall/123/web。web裏邊有index.php,
當我訪問 example.123.cn/index 的時候,try_files 會在web下找是否有index文件和目錄(因爲配置了 $uri 和 $uri/ ), 很顯然web目錄裏邊沒有,所以就把index當成了參數,所以呢原來的 example.123.cn/index 就變成了 example.123.cn/index.php?index 就這樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章