主页 > Linux教程 > 正文

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支撑)写在这儿仅仅为了便利了解:

if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") {

  return 403;

}


这是等效的,并实在可用的装备

set $flag 0;
if ($remote_addr ~ "^(12.34|56.78)") {
  set $flag "${flag}1";
}
if ($http_user_agent ~* "spider") {
  set $flag "${flag}2";
}
if ($flag = "012") {
  return 403;
}


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.log xingcheng;
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体系版别信息
下一篇:Linux求两个文本文件的交集、差集、并集

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854