博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx 逻辑运算if()学习笔记
阅读量:4045 次
发布时间:2019-05-24

本文共 1228 字,大约阅读时间需要 4 分钟。

的配置中不支持if条件的逻辑与&& 逻辑或|| 运算 ,而且不支持if的嵌套语法,否则会报下面的错误:nginx: [emerg] invalid condition。

我们可以用变量的方式来间接实现。

要实现的语句:

 代码如下 复制代码

if ($arg_unitid = 42012 && $uri ~/thumb/){ 

 echo "www.111cn.net"; 
}

如果按照这样来配置,就会报nginx: [emerg] invalid condition错误。

可以这么来实现,如下所示:

 代码如下 复制代码

set $flag 0; 

if ($uri ~ ^/thumb/[0-9]+_160.jpg$){ 
 set $flag "${flag}1"; 
if ($arg_unitid = 42012){ 
 set $flag "${flag}1"; 
if ($flag = "011"){ 
 echo "www.111cn.net"; 
}

例,nginx实现多重if判断

 代码如下 复制代码

# 要实现的语句
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;
}

举例

 代码如下 复制代码

if ($http_user_agent ~ MSIE) {

  rewrite  ^(.*)$  /msie/$1  break;
//如果UA包含”MSIE”,rewrite 请求到/msie目录下

if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {

  set  $id  $1;
//如果cookie匹配正则,设置变量$id等于正则引用部分

if ($_method = POST ) {

  return 405;
//如果提交方法为POST,则返回状态405 (Method not allowed)

if (!-f $request_filename) {

  break;
  proxy_pass  http://127.0.0.1;
//如果请求文件名不存在,则反向代理localhost

if ($args ~ post=140){

  rewrite ^ http://example.com/ permanent;
//如果query string中包含”post=140″,永久重定向到example.com

转载地址:http://dzhdi.baihongyu.com/

你可能感兴趣的文章
Winform皮肤控件IrisSkin4.dll使用
查看>>
Winform多线程
查看>>
C# 托管与非托管
查看>>
CheckListBox用法详解
查看>>
帮助文档(*.chm)制作 以及在winform程序中的应用
查看>>
字节序(byte order)及其实现方法
查看>>
C# 重写WndProc 拦截 发送 系统消息
查看>>
C#接口详解
查看>>
C#多态性详解
查看>>
LabVIEW OOP基础
查看>>
JS高阶知识点
查看>>
前端经典面试题(持续更新)
查看>>
Markdown编辑器基本语法
查看>>
深入理解计算机系统(读书笔记)
查看>>
Markdown编辑公式和CSDN-Markdown编辑公式
查看>>
计算机网络(读书笔记)
查看>>
TCP/IP协议(一)
查看>>
TCP/IP协议(二)
查看>>
lnmp、lamp、lnmpa一键安装包
查看>>
20个常用的javascript正则表达式
查看>>