亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

扣丁學堂紅帽Linux開發Nginx實現IF語句AND和OR多重判斷

標簽:
Linux

  一、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

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消