Nginx ------ Rewrite详解、具体使用情景

一、使用yum安装nginx服务:

(1)第一步:安装源:

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

(2)第二步:直接用yum安装

yum install nginx -y

二、Rewrite 介绍:

(1)Rewrite跳转场景:

  • URL 看起来更规范、合理;
  • 企业会将动态URL地址伪装成静态地址提供服务;
  • 网址换域名后,让旧的访问跳转到新的域名上;
  • 服务端某些业务调整

(2)Rewrite 跳转实现:
在这里插入图片描述
(3)Rewrite 实用场景:

1、Nginx跳转需求的实现方式:

  • 使用rewrite进行匹配跳转;
  • 使用if匹配全局变量后跳转;
  • 使用location 匹配再跳转

2、rewrite放在 server { },if { };location{ }段中;

3、对域名或参数字符串:

  • 使用 if 全局变量匹配;
  • 使用 proxy_pass 反向代理

(4)常用的正则表达式元字符:
在这里插入图片描述
(5)Rewrite 命令:

语法:
在这里插入图片描述
(6)location 分类:

1、分类:

  • location = patt { } [精准匹配]
  • location patt { } [一般匹配]
  • location ~ patt { } [正则匹配]

2、正则匹配的常用表达式:
在这里插入图片描述

(7)location 优先级:

1、相同类型的表达式,字符串长的会优先匹配;

2、按优先级排列

  • = 类型
  • ^~ 类型表达式
  • 正则表达式(~ 和 ~*)类型
  • 常规字符串匹配类型,按前缀匹配
  • 通用匹配(/),如果没有其他匹配,任何请求都会匹配到

(8)location 优先级规则:

1、匹配某个具体文件:
在这里插入图片描述
2、用目录做匹配访问某个文件:
在这里插入图片描述

三、具体应用场景:

场景一:基于域名的跳转

(1)实验环境:公司旧域名:www.accp.com,因业务需求有变更,需要使用新的域名www.kgc.com来代替旧域名。

(2)实验要求:

  • 不能废除旧域名;
  • 从旧域名跳转到新域名,且保持其参数不变

未进行域名跳转之前服务旧域名时:

在这里插入图片描述
第一步:修改nginx配置文件,/etc/nginx/conf.d/default.conf

在这里插入图片描述
在location{ }段加入以下代码:

if ($host = 'www.accp.com'){
                rewrite ^/(.*)$ http://www.kgc.com/$1 permanent;
           }
//域名重定向:表示当访问域名www.accp.com时,将自动跳转到www.kgc.com域名,permanent表示永久的意思

在这里插入图片描述
第二步:重启nginx服务

[root@nginx ~]# systemctl stop nginx.service 
[root@nginx ~]# systemctl start nginx.service 

第三步:再在网页上访问 www.accp.com,就会自动跳转到新的域名www.kgc.com,但是网页内容不变的。
如果在网页后面加参数,还是会跟着域名一起跳转的。

在这里插入图片描述

场景二:基于客户端 IP访问跳转

实验要求:今天公司业务版本上线,所有IP访问任何内容都显示一个固定维护页面,只有公司的IP才能访问正常。

PC1(公司 ip)PC2
192.168.220.128192.168.220.132

第一步:修改nginx配置文件,添加以下代码

set $rewrite true;     //设置是否合法的IP标志
   if ($remote_addr = "192.168.220.128"){
       set $rewrite false;
       }              //判断是否为合法IP
   if ($rewrite = true){
       rewrite (.+) /main.html;
       }              //非法IP进行判断打上标记
    location = /main.html {
       root /usr/share/nginx/html;
       }              //匹配标记进行跳转站点

在这里插入图片描述
第二步:重启nginx服务

第三步:现在这两台PC机同时访问公司官网 www.accp.com

1、PC1上显示如下:
在这里插入图片描述
2、PC2上显示如下:
在这里插入图片描述

场景三:基于新、旧域名跳转并加目录

例如:现在访问的是 http://bbs.accp.com ,现在需要将这个域名下面的发帖都跳转到 http://www.accp.com/bbs,注意保持域名跳转后的参数不变。

第一步:在nginx配置文件中添加以下代码

location /post {
         rewrite (.+) http://www.accp.com/bbs$1 permanent;
      }

在这里插入图片描述
第二步:重启服务

第三步:在客户机上访问 http://bbs.accp.com/post/a.html ,会帮我们自动跳转到http://www.accp.com/bbs/post/a.html , 此时域名跳转后的参数并没有变还是bbs

场景四:基于参数匹配的跳转

例如:浏览器访问,http://www.accp.com/100-(100|200)-100.html,会自动跳转到 http://www.accp.com 的页面。

第一步:修改nginx的配置文件,添加以下代码

if$request_uri ~ ^/100-(100|200)-(\d+).html$) {
           rewrite (.*) http://www.accp.com permanent;
     }

在这里插入图片描述
第二步:重启服务

第三步:在浏览器访问 http://www.accp.com/100-100-100.html,就会帮我们自动跳转到www.accp.com网站

场景五:基于目录下所有的 php文件跳转

例如,我们访问 http://www.accp.com/upload/1.php ,会自动跳转到首页www.accp.com

第一步:在nginx配置文件中加入以下代码

location ~* /upload/.*\.php$ {
        rewrite (.+) http://www.accp.com permanent;
       }

第二步:重启服务

第三步:在浏览器上访问 http://www.accp.com/upload/a.php ,就会帮我们自动跳转到 www.accp.com网页。

场景六:基于最普通 url请求的跳转

场景说明,我们访问一个具体的页面都会帮我们跳转到首页www.accp.com
例如,我们在网页上访问一个具体网址 http://www.accp.com/1/test.html ,就会帮我们跳转到首页 www.accp.com

第一步:在nginx配置文件中添加以下代码

location ~* ^/1/test.html{
    rewrite (.+) http://www.accp.com permanent;
}

在这里插入图片描述
第二步:重启服务

第三步:在网页上访问http://www.accp.com/1/test.html ,会自动跳转到 www.accp.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值