NGINX實現IF語句裡的AND,OR多重判斷

2021-08-05 19:11:09 字數 2680 閱讀 3242

nginx實現if語句裡的and,or多重判斷

一、nginx rewrite規則相關指令有if、rewrite、set、return、break等

1.其中rewrite是最關鍵的指令。乙個簡單的nginx rewrite規則語法如下:

rewrite ^/b/(.*)\.html /play.php?video=$1 last;

break;

2.如果加上if語句,示例如下:

if  (!-f $request_filename )

rewrite ^/img/(.*)$ /site/$host/images/$1 last;

二、nginx與apache的rewrite規則例項對比(此處參照

簡單的nginx和apache 重寫規則區別不大,基本上能夠完全相容。例如:

apache rewrite 規則:

rewriterule ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 [l]

rewriterule ^/ceshi/$ /zl/ceshi.php [l]

rewriterule ^/(mianshi)_([a-za-z]+)/$ /zl/index.php?name=$1_$2 [l]

rewriterule ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 [l]

nginx rewrite 規則:

rewrite ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 last;

rewrite ^/ceshi/$ /zl/ceshi.php last;

rewrite ^/(mianshi)_([a-za-z]+)/$ /zl/index.php?name=$1_$2 last;

rewrite ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 last;

三、nginx實現if語句裡的and,or多重判斷

1.nginx的配置中不支援if條件的邏輯與/邏輯或運算 ,並且不支援if的巢狀語法,我們可以用變數的方式來實現:

具體方法為and 就用變數疊加,or就用0或1切換。

1)首先是偽**(即不被nginx支援),寫在這裡只是為了方便理解:

這是等效的,並真實可用的配置

2)貼一段伺服器真實生效的配置

location /

set $ll $request_filename;

if ( !-e $request_filename )

if ( !-e $l2 )

if ( $l4 = 13)

access_log /tmp/51centos-access.log xingcheng;

error_log /tmp/51centos-error.log;}}

釋義:a.$request_filename 為被請求檔案的路徑,$request_filename ~ ^(.+)/(.+)$為被請求檔案的上級目錄資訊。可以將$l2定義在日誌格式中,通過日誌檢視輸出是否成功。

b.通過 set $l4 "1$l3" ,實際上就代替了邏輯與運算。

四、nginx的rewrite規則參考:

- ~ 為區分大小寫匹配

- ~* 為不區分大小寫匹配

- !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹

- -f和!-f用來判斷是否存在檔案

- -d和!-d用來判斷是否存在目錄

- -e和!-e用來判斷是否存在檔案或目錄

- -x和!-x用來判斷檔案是否可執行

- last 相當於apache裡的[l]標記,表示完成rewrite,呵呵這應該是最常用的

- break 終止匹配, 不再匹配後面的規則

- redirect 返回302臨時重定向 位址列會顯示跳轉後的位址

- permanent 返回301永久重定向 位址列會顯示跳轉後的位址

nginx中的if語句

if指令 格式 if 條件判斷 一 if語句中的判斷條件 nginx 1 正規表示式匹配 等值比較 與指定正規表示式模式匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式匹配時返回 真 判斷匹配與否時不區分字元大小寫 與指定正規表示式模式不匹配時返回 真 判斷匹配與否時區分字元大小寫...

Spark shell裡的語句探索

不多說,直接上乾貨!wget scala val infile sc.textfile spam.data 這行 的意思是,將spam.data檔案中的每行作為乙個rdd中的單獨元素載入到spark中,並返回乙個名為infile的rdd。scala import spark.sparkfiles s...

nginx裡的sticky的作用

1.sticky工作原理 sticky是nginx的乙個模組,它是基於cookie的一種nginx的負載均衡解決方案,通過分發和識別cookie,來使同乙個客戶端的請求落在同一臺伺服器上,預設標識名為route 1.客戶端首次發起訪問請求,nginx接收後,發現請求頭沒有cookie,則以輪詢方式將...