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,則以輪詢方式將...