扣丁学堂红帽Linux开发Nginx实现IF语句AND和OR多重判断

2018-07-03 11:20:51 536浏览

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

以上就是关于扣丁学堂红帽Linux开发Nginx实现IF语句AND和OR多重判断的详细介绍,想要了解更多关于Linux培训就业班或行业前景,请关注扣丁学堂官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的Linux视频教程系统,通过千锋扣丁学堂金牌讲师在线录制的Linux视频教程课程,让你快速掌握Linux从入门到精通开发实战技能。扣丁学堂Linux技术交流群:422345477

扣丁学堂微信公众号



关注微信公众号获取更多的学习资料



查看更多关于“Linux培训资讯的相关文章>>

标签: Linux命令 Linux视频教程 Linux培训 Linux在线学习 Linux在线视频

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号