Nginx配置中if判斷的使用
當rewrite的重寫規(guī)則滿足不了需求時,比如需要判斷當文件不存在時、當路徑包含xx時等條件,則需要用到if
if語法
if (表達式) {
...
}表達式語法:
- 當表達式只是一個變量時,如果值為空或任何以0開頭的字符串都會當做false
- 直接比較變量和內(nèi)容時,使用=或!=
- -f和!-f用來判斷是否存在文件
- -d和!-d用來判斷是否存在目錄
- -e和!-e用來判斷是否存在文件或目錄
- -x和!-x用來判斷文件是否可執(zhí)行
為了配置if的條件判斷,這里需要用到nginx中內(nèi)置的全局變量
$args 這個變量等于請求行中的參數(shù),同$query_string
$content_length 請求頭中的Content-length字段。
$content_type 請求頭中的Content-Type字段。
$document_root 當前請求在root指令中指定的值。
$host 請求主機頭字段,否則為服務器名稱。
$http_user_agent 客戶端agent信息
$http_cookie 客戶端cookie信息
$limit_rate 這個變量可以限制連接速率。
$request_method 客戶端請求的動作,通常為GET或POST。
$remote_addr 客戶端的IP地址。
$remote_port 客戶端的端口。
$remote_user 已經(jīng)經(jīng)過Auth Basic Module驗證的用戶名。
$request_filename 當前請求的文件路徑,由root或alias指令與URI請求生成。
$scheme HTTP方法(如http,https)。
$server_protocol 請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。
$server_addr 服務器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個值。
$server_name 服務器名稱。
$server_port 請求到達服務器的端口號。
$request_uri 包含請求參數(shù)的原始URI,不包含主機名,如:”/foo/bar.php?arg=baz”。
$uri 不帶請求參數(shù)的當前URI,$uri不包含主機名,如”/foo/bar.html”。
$document_uri 與$uri相同。
舉例說明
1、如果文件不存在則返回400
if (!-f $request_filename) {
return 400;
}2、如果host不是jouypub.com,則301到jouypub.com中
if ( $host != 'jouypub.com' ){
rewrite ^/(.*)$ https://jouypub.com/$1 permanent;
}3、如果請求類型不是POST則返回405
if ($request_method = POST) {
return 405;
}4、如果參數(shù)中有a=1則301到指定域名
if ($args ~ a=1) {
rewrite ^ http://example.com/ permanent;
}5、在某種場景下可結(jié)合location規(guī)則來使用,如:
# 訪問 /test.html 時
location = /test.html {
# 設置默認值為xiaowu
set $name xiaowu;
# 如果參數(shù)中有 name=xx 則使用該值
if ($args ~* name=(\w+?)(&|$)) {
set $name $1;
}
# 301
rewrite ^ /$name.html permanent;
}上面表示:
/test.html => /xiaowu.html
/test.html?name=ok => /ok.html?name=ok
到此這篇關于Nginx配置中if判斷的使用的文章就介紹到這了,更多相關Nginx if判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nginx下讓WordPress支持固定鏈接的偽靜態(tài)規(guī)則
Nginx下讓WordPress支持固定鏈接的偽靜態(tài)規(guī)則,要讓nginx支持wordpress固定鏈接非常簡單,需要自己進行添加點配置代碼2013-02-02

