当rewrite的重写规则满足不了需求时,比如需要判断当文件不存在时、当路径包含xx时等条件,则需要用到if

if语法

if (表达式) {...
}

表达式语法:

  1. 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
  2. 直接比较变量和内容时,使用=或!=
  3. -f和!-f用来判断是否存在文件
  4. -d和!-d用来判断是否存在目录
  5. -e和!-e用来判断是否存在文件或目录
  6. -x和!-x用来判断文件是否可执行

为了配置if的条件判断,这里需要用到nginx中内置的全局变量

$args               这个变量等于请求行中的参数,同$query_string
$content_length     请求头中的Content-length字段。
$content_type       请求头中的Content-Type字段。
$document_root      当前请求在root指令中指定的值。
$host               请求主机头字段,否则为服务器名称。
$http_user_agent    客户端agent信息
$http_cookie        客户端cookie信息
$limit_rate         这个变量可以限制连接速率。
$request_method     客户端请求的动作,通常为GET或POST。
$remote_addr        客户端的IP地址。
$remote_port        客户端的端口。
$remote_user        已经经过Auth Basic Module验证的用户名。
$request_filename   当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme             HTTP方法(如http,https)。
$server_protocol    请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr        服务器地址,在完成一次系统调用后可以确定这个值。
$server_name        服务器名称。
$server_port        请求到达服务器的端口号。
$request_uri        包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri                不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri       与$uri相同。

举例说明

1、如果文件不存在则返回400

if (!-f $request_filename) {return 400;
}

2、如果host不是jouypub.com,则301到jouypub.com中

if ( $host != 'jouypub.com' ){rewrite ^/(.*)$ https://jouypub.com/$1 permanent;
}

3、如果请求类型不是POST则返回405

if ($request_method = POST) {return 405;
}

4、如果参数中有a=1则301到指定域名

if ($args ~ a=1) {rewrite ^ http://example.com/ permanent;
}

5、在某种场景下可结合location规则来使用,如:

# 访问 /test.html 时
location = /test.html {# 设置默认值为xiaowuset $name xiaowu;# 如果参数中有 name=xx 则使用该值if ($args ~* name=(\w+?)(&|$)) {set $name $1;}# 301rewrite ^ /$name.html permanent;
}

上面表示:
/test.html => /xiaowu.html
/test.html?name=ok => /ok.html?name=ok

Nginx配置中的if判断相关推荐

  1. Nginx配置中的log_format用法梳理(设置详细的日志格式)

    Nginx配置中的log_format用法梳理(设置详细的日志格式) nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式:另外一条是access_log,用来指定日志 ...

  2. Nginx 配置中一个不起眼字符 “/“ 的巨大作用

    Nginx作为一个轻量级的,高性能的web服务软件,因其占有内存少,并发能力强的特点,而广受欢迎和使用.国内很多大型互联网公司也对Nginx很是青睐.像BAT(百度,阿里和腾讯),TMD(头条,美团和 ...

  3. Nginx配置中一个不起眼字符/的巨大作用,失之毫厘谬以千里

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://zhuanlan.zhihu. ...

  4. Nginx动态、静态分离,Nginx配置中做适配

    Nginx[静态,动态] 页面是html,mp3,mp4,txt,doc,pdf 动态脚本语言:shell,PHP,java 一:       LNMP (Linux+Nginx+MariaDB==m ...

  5. nginx配置中proxy_redirect的作用(转)

    来自http://wntest.ustc.edu.cn/mine/wordpress/?p=400  及 http://hi.baidu.com/171892549/blog/item/0ec6aae ...

  6. nginx配置中location匹配规则详解

    女主宣言 nginx作为一款性能优异的反向代理服务器,可以用于静态代理.负载均衡.限流等多种场景.那么,要灵活的使用nginx,必须清楚nginx配置文件的使用.本文作者对nginx的http块中的l ...

  7. nginx配置中root与alias的区别

    nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应.root与alias主要区别在于nginx如何解释location后面的uri ...

  8. Nginx配置中的80端口

    server {listen 80;//浏览器默认端口server_name aa.bb.cn;//#提供服务的域名主机号location /tt/ {proxy_pass http://localh ...

  9. Nginx 配置中nginx和alias的区别分析

    一.root和alias都可以定义在location模块中,都是用来指定请求资源的真实路径 root location /i/ { root /data/w3; } #请求 http://foofis ...

最新文章

  1. asp.net 连接access数据库方法
  2. Leetcode232使用栈实现队列
  3. [BUUCTF-pwn]——[第六章 CTF之PWN章]stack
  4. SQL基础三(例子)
  5. 计算机为什么检测不到u盘启动项,BIOS设置U盘为第一启动项后检测不到如何解决?...
  6. postgis安装_从零开始,构建电子地图网站:0_2_数据处理postgis
  7. array_walk与array_map的区别
  8. 插件多行显示_Sublime Text 3最好的功能、插件和设置
  9. LoNg wAy tO Go
  10. 大数据_Flink_流式处理_简介_Flink的特点---Flink工作笔记0006
  11. opengl 坐标的基本变换
  12. 单列(写了池子pool)用list实现的方法, 与伪单例(写了池子zidianpool),用字典实现的方法,可以存入不同,i名字的物体...
  13. 2014-2015 ACM-ICPC, NEERC, Eastern Subregional Contest Problem H. Pair: normal and paranormal
  14. Linux driver 板级文件跟踪一般方法
  15. Linux内核对per-cpu变量的实现
  16. 关于我国高等数学教材的版权发财户
  17. 简单有效的记录日常收支
  18. 轻量级Kubernetes之k3s:10:ContainerCreating状态的解决方法
  19. 计算机专业专硕,2018厦门大学计算机专硕考研经验贴(专业课干货!!)
  20. 盘点八大虚拟桌面基础架构(VDI)协议

热门文章

  1. google s2 java开发文档
  2. 一个程序员 作者 设计师的 2018 年终总结
  3. STM32debug模式下可以执行,但是不能单步调试和跳转
  4. 压缩包文件跟html不一样,为什么压缩文件还是那么大
  5. Springcloudalibaba整合es!实现相关性排序,集成完代码真香
  6. 微信小程序开发报错及解决记录
  7. uml的用例图中扩展关系与包含关系
  8. Android随机点名器,Excel基础知识-详解随机点名器
  9. 第九章——规范数据库设计
  10. 史上最全的安卓WebView之WebSettings说明