linux中的or和and的区别,扣丁学堂红帽Linux开发Nginx实现IF语句AND和OR多重判断
一、NginxRewrite規則相關指令有if、rewrite、set、return、break等
1.其中rewrite是最關鍵的指令。一個簡單的NginxRewrite規則語法如下:
rewrite^/b/(.*)\.html/play.php?video=$1last;
break;
2.如果加上if語句,示例如下:
if(!-f$request_filename)
rewrite^/img/(.*)$/site/$host/images/$1last;
二、Nginx與Apache的Rewrite規則實例對比
簡單的Nginx和Apache重寫規則區別不大,基本上能夠完全兼容。例如:
ApacheRewrite規則:
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]
NginxRewrite規則:
rewrite^/(mianshi|xianjing)/$/zl/index.php?name=$1last;
rewrite^/ceshi/$/zl/ceshi.phplast;
rewrite^/(mianshi)_([a-zA-Z]+)/$/zl/index.php?name=$1_$2last;
rewrite^/pingce([0-9]*)/$/zl/pingce.php?id=$1last;
三、NGINX實現IF語句里的AND,OR多重判斷
1.nginx的配置中不支持if條件的邏輯與/邏輯或運算,并且不支持if的嵌套語法,我們可以用變量的方式來實現:
具體方法為AND就用變量疊加,OR就用0或1切換。
1)首先是偽代碼(即不被nginx支持)寫在這里只是為了方便理解:
if($remote_addr~"^(12.34|56.78)"&&$http_user_agent~*"spider"){
return403;
}
這是等效的,并真實可用的配置
set$flag0;
if($remote_addr~"^(12.34|56.78)"){
set$flag"${flag}1";
}
if($http_user_agent~*"spider"){
set$flag"${flag}2";
}
if($flag="012"){
return403;
}
2)服務器真實生效的配置
location/{
if($request_filename~^(.+)/(.+)$){
set$l2$1;
}
set$ll$request_filename;
if(!-e$request_filename){
set$l3"3";
}
if(!-e$l2){
set$l4"1$l3";
}
if($l4=13){
rewrite^(.*)$https://www.baidu.com;
}
access_log/tmp/pythotab-access.logxingcheng;
error_log/tmp/pythotab-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永久重定向地址欄會顯示跳轉后的地址
-$args
-$content_length
-$content_type
-$document_root
-$document_uri
-$host
-$http_user_agent
-$http_cookie
-$limit_rate
-$request_body_file
-$request_method
-$remote_addr
-$remote_port
-$remote_user
-$request_filename
-$request_uri
-$query_string
-$scheme
-$server_protocol
-$server_addr
-$server_name
-$server_port
-$uri
作者:扣丁學堂
鏈接:https://www.jianshu.com/p/8e90266ba77e
總結
以上是生活随笔為你收集整理的linux中的or和and的区别,扣丁学堂红帽Linux开发Nginx实现IF语句AND和OR多重判断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spingboot:登出功能
- 下一篇: 云计算的一些常见安全风险