2016年6月4日 星期六

Nginx if、and、網域名稱、GET 變數判斷

Nginx 取得網域名稱:$host (例如:example.com)
Nginx 取得 GET 變數:$arg_變數名稱 (例如:$arg_aa,表示 aa 這個 GET 變數)

Nginx 比較運算子(=、!=),前後要空格
不然會出現 unknown "host123" variable 或 invalid condition "$host!=" 錯誤。
if 跟前小刮號 ( 也要空格,不然會出現 unknown directive "if($host" 錯誤。
例如:
if ($host = '123'){
}
if ($host != '123'){
}


GET 變數判斷
#表示GET有一個aa變數值等於 abc
if ($arg_aa = 'abc'){
}
#表示一整串的GET數值,有任一處出現 abc(不一定是值)
#例如 aa=123&aabcc=456 (aabcc 中間有出現 abc)
if ($args ~ 'abc'){
}
#表示一整串的GET數值,沒有任一處出現 abc
if ($args !~ 'abc'){
}


Nginx 沒 AND,所以要另其他方式達成,
例如用兩個 if 達到 AND 效果:
set $isOK 0;
if ($host = 'example.com'){
    set $isOK 1;
}
if ($arg_aa != 'abc'){
    set $isOK "${isGoOut}1";
}
if ($isOK = 11){
    return 301 http://xx.example.org;
}



參考:
Nginx unknown directive "if($domain" - Stack Overflow
NGINX的奇淫技巧 —— 2. IF AND 和 OR - A.R.G.U.S. Sec Team - SegmentFault
nginx hack for multiple conditions · GitHub
Making nginx check parameter in url - Stack Overflow
nginx built-in variables (nginx 内置的变量) - 申思维的技术站点
Module ngx_http_rewrite_module


沒有留言:

張貼留言