IF语句:

http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_rewrite_module.html#if

首先申明nginx只有if语句做判断适应,没有else语句

if语句的常用形式如下:

if(condition){
... ;

默认值:  —
应用位置:  server、location

计算指定的condition的值。如果为真,执行定义在大括号中的指令,并将if指令中的配置指定给请求。if指令会从上一层配置中继承配置。

条件可以是下列任意一种:

变量名;如果变量值为空或者是以"0"开始的字符串,则条件为假;
使用 = 和 != 运算符比较变量和字符串;
使用 ~(大小写敏感)~*(大小写不敏感)运算符匹配变量和正则表达式。正则表达式可以包含匹配组,匹配结果后续可以使用变量$..$9引用。如果正则表达式中包含字符'}'或者';',整个表达式应该被包含在单引号或双引号的引用中。
使用 -f 和 !-f 运算符检查文件是否存在;
使用 -d 和 !-d 运算符检查目录是否存在;
使用 -e 和 !-e 运算符检查文件、目录或符号链接是否存在;
使用 -x 和 !-x 运算符检查可执行文件;

rewrite语法:

  指令语法:rewrite regex replacement[flag];

  默认值:none

  应用位置:server、location、if

  rewrite是实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到replacement,结尾是flag标记

  简单的小例子:

if ($request_uri ~* "tobd") {
rewrite ^/(.*) http://www.baidu.com/ permanent; # 如果匹配成功后跳转到百度,执行永久301跳转
}

  常用正则表达式:

字符 描述
\ 将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符零次或者多次
+ 匹配前面字符串一次或者多次
? 匹配前面字符串的零次或者一次
. 匹配除“\n”之外的所有单个字符
(pattern) 匹配括号内的pattern

  rewrite 最后一项flag参数:

标记符号 说明
last 本条规则匹配完成后继续向下匹配新的location URI规则
break 本条规则匹配完成后终止,不在匹配任何规则
redirect 返回302临时重定向
permanent 返回301永久重定向

1、基础知识点

(1)Rewirte规则也称为 规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言。

(2)对收缩引擎优化(SEO),利于收索引擎抓取网站页面。

(3)隐藏网站URL真实地址。

(4)网站变更升级,可以基于Rewrite临时重定向到其他页面。

(5)有利于服务器实现伪静态。

2、Rewrite结尾表示符

(1)last:相当于apache里的(L)标记,表示完成rewrite匹配。(浏览器地址栏URL地址不变)

(2)break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。(浏览器地址栏URL地址不变)

(3)redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址。

(4)permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

3、Rewrite规则常用表达式

(1)    匹配任何单字符;

(2)? 匹配0到1个字符;只匹配一次;

(3)*   匹配0到多个字符;

(4)+  匹配1到多个字符;

(5)[0-9]  匹配字符串0-9

(6)[^0-9] 不匹配字符串0-9

(7)^  字符串开始标志

(8)$ 字符串结束标志

(9)\n 转义换行标志

4、Nginx Rewrite变量常用于匹配HTTP请求头信息、浏览器主机名、URL等。

5、Rewrite配置在nginx的location块中的配置

(1)将dks.net跳转至www.dks.net

if($host='dks.net')    {
rewrite ^/(.*)$ http://www.dks.net/$1 permanent;
}
  # $host内置nginx变量,匹配用户访问的域名
  # $1表示引用第一个括号的内容,是用户输入的内容;如果不使用$1引用,则只会匹配根

(2)将访问www.dks.net/跳转至www.test.com/new.index.html

rewrite    ^/$    http://www.test.com/new.index.html     permanent;

(3)访问 /dks/test01/跳转至/newindex.html,浏览器地址不变

rewrite    ^/dks/test01/$    /newindex.html    last;

(4)多域名跳转 www.dks.net

if($host!='www.dks.net')    {
rewrite ^/(.*)$ http://www.dks.net/$1 permanert;
}

(5)访问文件和目录不存在跳转至index.php

  !-f 和 -f 判断文件

  !-d 和 -d 判断目录

  !-e 和 -e 判断文件和目录

  !-x 和 -x 判断文件是否可执行

if(!-e    $request filename)    {
rewrite ^/(.*) /index.php last;
}

(6)目录对换 /xxx/123456——> /xxx?id=123456

  \d+ 代表匹配数字,相当于[0-9]

rewrite    ^/(.+)/(\d+)    /$1?id=$2    last;

(7)判断浏览器User Agent跳转

if($http_user_agent    ~MSIE)    {
rewrite ^(.*)$/ie/$1 break;
}

(8)禁止访问以.sh | .flv  |  .mps为文件后缀的文件

location ~.*\.(sh|flv|mp3)$    {
return 403;
}

(9)将移动用户访问跳动至移动端。

if($http_user_agent ~*  "(Android)|(iphone)|(Mobile)|(WAP)|(UCWEB)")    {
rewrite ^/$ http://m.dks.net/ permanent;
}

(10)匹配URL访问字符串跳转

if($args ~* tid=13)    {
return 404;
}

(11)访问/10690/dks/123  跳转至/index.php?tid/10690/items=123

rewrite    ^/([0-9]+)/dks/(.+)$    /index.php?tid/$1/items=$2    last;

6、多rewrite规则跳转

rewrite ^/dks/(.*)/$ /newindex.html permanent;  #可以跳转
rewrite ^/newindex.html$ /dks/test01/index.html permanent;
rewrite ^/dks/(.*)/$ /newindex.html break;    #break 终止跳转,执行下一条rewrite规则
rewrite ^/newindex.html$ /dks/test01/index.html permanent;
rewrite ^/dks/(.*)/$ /newindex.html last;    #last  跳转,但下面那条rewrite规则匹配不上,因为last使地址栏url地址不变,所以下面的那条rewrite规则匹配不上;
rewrite ^/newindex.html$ /dks/test01/index.html permanent; #此条规则匹配不上上边的url地址

Nginx之Rewrite规则的更多相关文章

  1. Nginx的Rewrite规则与实例

    通过Rewrite规则可以实现规范的URL.根据变量来做URL转向及选择配置,用好Rewrite有时起到事半功倍的效果. 语法 Nginx的Rewrite相比Apache的要好理解很多,主要使用指令有 ...

  2. Apache和Nginx的Rewrite规则对比

    一.Apache的rewrite 1.Rewrite规则简介: Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.h ...

  3. Nginx 设置rewrite规则是遇到的一个{}大括号引发的报错问题

    一个群友提到: 用nginx image_filter模块裁图,用!拼宽高能够实现,现在想用参数传宽高总是报错,配置如下:   location ~ ^/images/.* {     if ( $q ...

  4. Nginx 之 Rewrite 规则

    write 规则介绍 Rewite 规则作用 Rewrite规则可以实现对url的重写,以及重定向 作用场景: URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等 SEO优化 维护:后台 ...

  5. nginx 带? rewrite 规则

    由于需要重定向 url ,nginx需要rewrite .参考文献 http://huangqiqing123.iteye.com/blog/2083434 需求:将http://10.106.1.3 ...

  6. nginx 重定向 rewrite 规则

    1.rewrite配置 server { listen 80 default_server; server_name jeson.t.imooc.io; access_log /var/log/ngi ...

  7. 修改Nginx 伪静态Rewrite规则 安装Chevereto

    Chevereto 是目前最为强大的 PHP 图床系统,通过它可部署多用户公开或私有的图片存储服务,现在 Chevereto 出了免费的版本,小伙伴可以围观一下. https://github.com ...

  8. nginx的rewrite规则

    301跳转: server { listen 80; server_name www.xiaofan.com; return 301 https://$server_name$request_uri; ...

  9. Nginx配置location总结及rewrite规则写法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "Helvetica Neue"; color: #323333 } p. ...

随机推荐

  1. 避免SQL全表模糊查询查询 下载文件时-修改文件名字

    避免SQL全表模糊查询查询   1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效 ...

  2. go test benchmark

    Benchtest的简单使用 一个简单的benchtest用例 // 以BenchmarkXXX类似命名,并传入b *testing.B 参数 func BenchmarkLoopSum(b *tes ...

  3. Socket网络编程-IO各种概念及多路复用

    Socket网络编程-IO各种概念及多路复用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统相关知识 1>.同步和异步  函数或方法被调用的时候,调用者是否得到最 ...

  4. Linux(Redhat)传送门汇总

    Linux(Redhat)传送门汇总 linux 环境布置 常用命令与shell 常用命令 shell 环境布置 Linux虚拟机安装(rhel 7.4) 虚拟机网络设置 VMware虚拟机开机启动 ...

  5. Pat 1003 甲级

    #include <cstdlib> #include <cstring> #include <iostream> #include <cstdio> ...

  6. 剑指Offer(十七):树的子结构

    剑指Offer(十七):树的子结构 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baidu_ ...

  7. hive删除数据(转)

    转自:https://www.cnblogs.com/linn/p/6196293.html 按分区删除: ALTER TABLE test1  DROP PARTITION (dt='2016-04 ...

  8. Dubbo架构及原理

    1.Dubbo:Dubbo是一个分布式服务框架,SOA治理方案. 主要功能有:高性能的NIO通讯以及协议集成.服务动态寻址与路由.软负载均衡与容错.依赖分析与降级 主要特点: 连通性:provider ...

  9. 22-1 web传输视频 Opencv+usb摄像头 树莓派+Flask实现视频流媒体WEB服务器

    第一篇 讲解原理 https://blog.miguelgrinberg.com/post/video-streaming-with-flask 第二篇 加入多线程可以直接用 https://gith ...

  10. call JSON.parse JSON.stringify typeof 的使用及严格模式this的使用

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...