一.正则匹配

    1.匹配规则

        ^$  标识符匹配后面跟-一个字符串。匹配字符串后将停止对后续的正则表达式进行匹配,如location ^~/images/,在匹配了/images/这个字符串后就停止对后续的正则匹配

        =   精准匹配,如location=/,只会匹配url为/的请求

        ~   区分大小写的匹配

        ~*  不区分大小写的匹配

        !~  对区分大小写的匹配取非

        !~* 对不区分大小写的匹配取非

        /   通用匹配,如果没有其它匹配,任何请求都会被匹配到

    2.正则表达

        *   重复前面的字符0次或多次

        ?   重复前面的字符0次或1次

        +   重复前面的字符1次或多次

        .   匹配除换行符以外的任意1个字符

        (a|b)   匹配a或b

        ^       以...开头

        $       以...结尾

        {n}     重复前面的字符n次

        {n,}    重复前面的字符n次或更多次

        {n,m)   重复前面的字符n到m次

        *?      重复前面的字符0次或多次,但尽可能少重复

        +?      重复前面的字符1次或更多次,但尽可能少重复

        ??      重复前面的字符0次或1次,但尽可能少重复

        {n.m}?  重复前面的字符n到m次, 但尽可能少重复

        {n,}?   重复前面的字符n次以上,但尽可能少重复

   

    3.正则表达式补充

        \W 匹配任意不是字母,数字,下划线.汉字的字符

        \S 配置任意不是空白符的字符

        \D 匹配任意非数字的字符

        \B 匹配不是单词开头或结束的位置

        [a] 匹配的那个字符a

        [a-z] 匹配a-z小写字母任意一个

        [^a] 匹配除了a以外的任意字符

        [^abc] 匹配除了abc这几个字母以外的任意字符

nginx Rewrite 规则

rewrite 功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现URL重写及重定向,rewrite只能放在server{}里,location{} .if {} . 并且只能对域名后边的除去参数外的字符窜起作用

nginx 的rewrite 规则兼容正则表达式的语法进行规则匹配,如果需要Nginx 的rewrite 功能,在编译安装nginx之前,必须安装PCRE库

语法:

rewrite 正则表达式  更换目标  [标志位]

rewrite和location 功能有点像,都能实现跳转,主要区别在于rewrite 是在同一域名内更改获取资源的路径,而Location 是对路径做控制访问或反向代理,可以使用proxy_pass到其他机器,极多情况下rewrite 也会写在Location里,他们的执行顺讯是

1. 执行server块的rewrite指令

2. 执行Location匹配

3. 执行选定的Location中的rewrite指令

(如果某段被重写,则重新循环1-3,直到找到真实存在的文件,循环经过10次,就会返回500错误)

flag标志位

last 相当于Apache 的[L]标记,表示完成rewrite

break 终止匹配,匹配完成时,不在匹配后的规则

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

permanert 返回301 永久重定向,浏览器地址栏会显示跳转后的URL地址

last 一般写在server和if 中,而break 一般使用在location 中

last 不终止重写后的URL匹配,即新的URL会在从server走一遍匹配流程,而Break终止重写后的匹配

break 和last 都能组织继续执行后面的rewrite 命令

last 和break 用来实现URL重写,浏览器地址栏URL地址不变

redirect 和 permanent 用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址

  if 指令与全局变量

        if 判断指令

            语法为 if (condirion) {...},对给定的条件condition进行判断.如果为真,大括号内的rewrite指令将被执行,if条件(condition)可以是如下任何内容

 

            直接比较变量和内容是,使用=或!=

            -f 和 !-f   用来判断是否存在文件

            -d 和 !-d   用来判断是否存在目录

            -e 和 !-e   用来判断是否存在文件或目录

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

  例如:

                if ($http_user_agent ~ MSIE)

                    rewriet ^(.*)$ /msie/$1 break;

                }                               //如果UA包含"MSIE",rewrite请求到/msid/目录下

 

                if ($request_method = POST ) {

                    return 405

                }       //如果提交方法为POST,则返回状态码405(Method not allowed) retum不能返回301,302(因为返回301,302不能只返回状态吗,还必选有重定向的URL,所以return指令无法返回301,302)

                

                if ($slow) {

                    limit_rate 10k

                }       //限速,$slow可通过set指令设置

 

                if (!-f $request_filename) {

                    break;

                    proxy_pass http://127.0.0.1;

                }       //如果请求的文件名不存在,则方向代理到localhost.这里的break也是停止rewrite检查

 

                if ($args ~ post=140) {

                    rewrite ^ http://example.com/ permanent;

                }       //如果query stiong中包含"post=140",永久重定向到exampl.com

 nginx变量

        $arg_PARAMETER 这个变量值为:GET请求中变量名PARAMETER参数的值。

        $args 这个变量等于GET请求中的参数。例如,foo=123&bar=blahblah;这个变量只可以被修改

        $binary_remote_addr 二进制码形式的客户端地址。

        $body_bytes_sent 传送页面的字节数

        $content_length 请求头中的Content-length字段。

        $content_type 请求头中的Content-Type字段。

        $cookie_COOKIE cookie COOKIE的值。

        $document_root 当前请求在root指令中指定的值。

        $document_uri 与$uri相同。

        $host 请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称(处理请求的server的server_name指令的值)。值为小写,不包含端口。

        $hostname  机器名使用 gethostname系统调用的值

        $http_HEADER   HTTP请求头中的内容,HEADER为HTTP请求中的内容转为小写,-变为_(破折号变为下划线),例如:$http_user_agent(Uaer-Agent的值), $http_referer...;

        $sent_http_HEADER  HTTP响应头中的内容,HEADER为HTTP响应中的内容转为小写,-变为_(破折号变为下划线),例如: $sent_http_cache_control, $sent_http_content_type...;

        $is_args 如果$args设置,值为"?",否则为""。

        $limit_rate 这个变量可以限制连接速率。

        $nginx_version 当前运行的nginx版本号。

        $query_string 与$args相同。

        $remote_addr 客户端的IP地址。

        $remote_port 客户端的端口。

        $remote_user 已经经过Auth Basic Module验证的用户名。

        $request_filename 当前连接请求的文件路径,由root或alias指令与URI请求生成。

        $request_body 这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。

        $request_body_file 客户端请求主体信息的临时文件名。

        $request_completion 如果请求成功,设为"OK";如果请求未完成或者不是一系列请求中最后一部分则设为空。

        $request_method 这个变量是客户端请求的动作,通常为GET或POST。

        包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。

        $request_uri 这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI。

        $scheme 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;

        $server_addr 服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。

        $server_name 服务器名称。

        $server_port 请求到达服务器的端口号。

        $server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

   .nginx location应用规则

    示例:   location [=|~|~*|!~|~!~*] /usl/ {...}

            默认值: no

            使用字段: server

            location参数根据URL的不同需求进行配置,可以使用字符串与正则表达式匹配

 

                                        location = / {

                                            proxy_pass http://tomcat_server;

                                        }

                               

            location = / {

            #精确匹配/  主机名后面不能带任意字符

            [configuration A]

            }  

 

            location / {

            #因为所有地址都以/开头,所以这条规则将匹配到所有请求,但是正则和最长字符串会优先匹配

            [configuration B]

            }

 

            location /documents/ {

            #匹配任何以/documets/开头的地址,匹配符合以后,还要继续向下搜索

            #只有后面的正则表达式没有匹配到时,这一条才会采用   

            [configuration C]

            }

           

            location ~ /documents/Abc {

            #匹配/documents/Abc的完整路基,匹配符合以后,还要继续向下匹配

            #只有后面的正则表达式(精确匹配)没有匹配到时,这一条才会采用

            [configuration CC]

            }

 

            location ^~ /images/ {

            #匹配任意以/images/开头的地址,匹配符合以后,停止往下搜索正则,采用这一条

            [configuration D]

            }

 

            location ~* \.(gif|jpg|jpeg)$ {

            #匹配所有以gif,jpg,jpeg结尾的请求

            #然而,所有请求/images/下的图品会被config D处理,因为^~到达不了这一条

            [configuration E]

            }

 

            location /images/ {

            #字符匹配到/images/,继续往下,发现^~存在

            [configuration F]

            }

           

            location /images/abc {

            #最长字符匹配到/images/abc,继续往下,会发行^~存在

            #F与G的放置顺序是没有关系的

            }

 

            location ~ /images/abc/ {

            #只有去掉config D才有效:先最长匹配config G 开头的地址,继续往下搜索,匹配到这一条采用

            }

           

 

 

    匹配优先级

        (location =  精确匹配 ) > (location 完整路径 ) > (location ^~ 路径 ) > (location ~,~*正则顺序) > (location 部分起始路径 ) > (location / 通用匹配)

 

 URL分析

        http://localhost:88/test1/test2/test.php

       

        $host:localhost

        $server_port:88

        $request_uri :  http://localhost:88/test1/test2/test.php

        $documenturl : /test1/test2/test.php

        $document_root : /var/www/html

        $request_filename : /var/www/html/test1/test2/test.php

 

实现域名跳转

    server {

    listen 80

    server_name www.jd.com

    charset utf-8

    root html ;

    index   index.html index.htm;

    if ($host = "www.360buy.com") {

        rewrite ^(.*)$ http:/www.jd.com/$1 permanent;

    }

    }           //永久重定向到www.jd.com

 

                //也可以在location {} // if () 中使用

Nginx Rewrite域名及资源重定向的更多相关文章

  1. Nginx Rewrite域名及资源重定向!(重点)

    第一步:搭建Nginx服务 第二步:修改主配置文件 [root@ns2 ~]# vim /usr/local/nginx/conf/nginx.conf user  nginx nginx; work ...

  2. Nginx 之四: Nginx服务器的rewrite、全局变量、重定向和防盗链相关功能

    一:Nginx 后端服务器组的配置: 1.upstream: 用于设置后端服务器组的主要指令,upstream类似于之前的server块或http块,用法如下: upstreame Myserver{ ...

  3. Nginx服务器的rewrite、全局变量、重定向和防盗链相关功能

    一:Nginx 后端服务器组的配置: 1.upstream: 用于设置后端服务器组的主要指令,upstream类似于之前的server块或http块,用法如下: upstreame Myserver{ ...

  4. 利用Nginx rewrite规则实现域名显性转发

    体验更优排版请移步原文:http://blog.kwin.wang/website/nginx-rewrite-realize-domain-forward.html 自己的blog域名最开始用的vb ...

  5. nginx——rewrite模块

    1.什么是Nginx的Rewrite规则? Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressio ...

  6. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

  7. [转帖]Nginx rewrite模块深入浅出详解

    Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...

  8. Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)

    一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...

  9. Nginx Rewrite正则表达式案例

    前两天简单整理了下Nginx的URL Rewrite基本指令,今天谈谈Nginx Rewrite的location正则表达式. 1.Nginx Rewrite 基本标记(flags) last 相当于 ...

随机推荐

  1. 推荐|MathType的使用技巧

    前言 持续更新中,敬请期待... 数学学科 制作新的数学符号 不包含于符号:输入$\not\subseteq,然后按回车键enter即可: 分式\(\cfrac{3-x}{2x-1}\)符号:输入$\ ...

  2. golang数据结构之栈

    stack.go package stack import ( "errors" "fmt" ) type Stack struct { MaxTop int ...

  3. Mybatis关联查询之二

    Mybatis关联查询之多对多 多对多 一.entity实体类 public class Student { private Integer stuid; private String stuname ...

  4. IT兄弟连 Java语法教程 流程控制语句 控制循环结构2

    使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循 ...

  5. XML与DTD(够用)

    1: 概述 1.1 什么是XML 1.2 三个重点 1.3规则 1.4 常用转义 2: Xml声明 XML 中,空格会被保留 XML 以 LF 存储换行 3:Xml标签 4:Xml元素 5:XML 属 ...

  6. JS setInterval 循环定时器的使用 以及动态倒计时展示

    例: var setTime = setInterval(function () { ff(); //每秒调用的方法函数 }, 1000); //1000毫秒为1秒 //可使用 clearInterv ...

  7. mysql常用命令杂记

    查看版本 mysqladmin -uRootmaster -pRootmaster@777 versionselect version() 查看Log_bin是否开启 show variables l ...

  8. 定位表和索引使用的Page

    数据存储的基本单元是Page,每个Page是8KB,数据文件(mdf和ndf)占用的硬盘空间,逻辑上按照PageNumber进行划分,也就是说,可以把数据文件看作是PageNumber 从0到n的连续 ...

  9. pandas 学习 第2篇:Series -(创建,属性,转换和索引)

    序列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的. 序列是一个一维数组,只有一个维度(或称作轴)是行(row),在访问序列 ...

  10. 控制FlowDocumentScrollViewer滚动到最下方

    原文发布于:https://www.chenxublog.com/2019/07/14/contrlo-flowdocumentscrollviewer-to-bottom.html 由于我在llco ...