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. Springboot+事务

    项目小 自己没有实际应用,但实际用起来不难. 参照 作者孙林峰的就可以了 http://blog.coocap.com/?p=610 其截图备份如下:

  2. Docker 0x04: Docker 基本使用

    目录 Docker 基本使用 第一步:明确要使用容器运行的应用的镜像相关 第二步:运行一个官方nginx应用 第三步:单纯下载镜像,pull 第四步:设置国内docker-hub 第五步:列出已有镜像 ...

  3. 【转载】【凯子哥带你学Framework】Activity启动过程全解析

    It's right time to learn Android's Framework ! 前言 一个App是怎么启动起来的? App的程序入口到底是哪里? Launcher到底是什么神奇的东西? ...

  4. sed - 文本三剑客之编辑功能

    sed - stream editor for filtering and transforming text Sed是一个流编辑器.流编辑器用于对输入流(文件或管道输入)执行基本的文本转换.虽然在某 ...

  5. 详解php概念以及主配置文件

    浏览器仅能够解码HTML格式的文档,对于非HTML格式的文档,浏览器调用插件或者通过CGI接口调用其他程序来解码. 动态网站: 我们在服务器端或客户端执行了一段脚本或者一段程序,这段程序执行的结果根据 ...

  6. 1.探索性数据分析(EDA,Exploratory Data Analysis)

    一.数据探索 1.数据读取 遍历文件夹,读取文件夹下各个文件的名字:os.listdir() 方法:用于返回指定的文件夹包含的文件或文件夹的名字的列表.这个列表以字母顺序. 它不包括 '.' 和'.. ...

  7. mmdetection安装教程

    如果官方教程不行再参考我的吧,我的环境如下: ubuntu cuda10 cudnn7.5 步骤: 1.使用conda创建一个虚拟环境 conda create -n mmdetection pyth ...

  8. php迭代器模式(iterator pattern)

    ... <?php /* The iterator pattern is used to traverse a container and access its elements. In oth ...

  9. awk编程的基本用法

    awk也是用来处理文本的,awk语言可以从文件或字符串中基于指定规则浏览和抽取信息,可以实现数据查找.抽取文件中的数据.创建管道流命令等功能. awk模式匹配 第一种方法打印空白行将空白行打印出来,并 ...

  10. iOS视图更新与事件循环

    iOS使用的是事件循环+标志更新(视图)机制. The View Drawing Cycle The UIView class uses an on-demand drawing model for ...