day50 最重要的rewrite的用法

day50 最重要的rewrite的用法

重点,rewrite的实际用法

我们上面学习的 if, retutn,set,break都是为了这个指令去服务的

当用访问京东的官网
实际上京东的官网是怎么使用rewrite技术的

# ?key=value这是基于get请求的格式,url传递的参数
# 用于交给后端的编程的语言,以及后续的url

1. http://www.360buy.com/index.html?name=yzk  301
跳转永久的定向
(信息1 访问的主机,端口,以及后续的url)

2,当发生301跳转之后,会保留后续所有的俩,后续的参数,全部转发给新的域名

知道了www.360buy.com 新域名www.jd.com
除了要让域名跳转外,还的实现参数的保存!!! 这是最重要的 

京东的做法是,跳转到www.jd.com且保留的参数
http://www.jd.com/index.html?name=yzk

rewrite 重写技术保留且参数

语法

句法:    rewrite regex replacement [flag];
默认:    —
语境:    server, location,if



rewrite  目的就是为了提取出url后面的参数  新的域名  [参数,301永久跳转,302临时跳转]

实际的配置文件


查看301的实际的用法(permanent)

也叫做永久的跳转

301 域名永久的更新,更换域名
举个例子:
www.yuchaoit.cn
↓
www.yzkit.xyz

在rewrite中使用rewrite / http://linux0224.com
permanent;
自动的识别为301的状态,永久的跳转

旧域名配置的文件,基于域名的虚拟的主机,做好域名的匹配

[root@web-9 www]# cat /etc/nginx/conf.d/laoliu.conf 


server {
listen 80;
server_name laoliu.cc;
location /{
	root /www/laoliu/;
	index index.html;
        # rewrite regex   新域名  参数
        #  rewrite regex(提取域名后面的参数)   新域名  参数
        # 简单的域名跳转用法
	rewrite / http://linux0224.com permanent;
	}

}


后面就是自己创建数据

新域名配置文件

这个新域名,应该放到新的服务器上

[root@web-9 www]# cat /etc/nginx/conf.d/linux0224.conf 


server {
listen 80;
server_name linux0224.com;
charset utf-8;

location / {
	root /www/linux0224/;
	index index.html;

	}

}

自己创建数据

配置好客户端,做好域名的解析

windows去测试hosts文件

10.0.0.9   laoliu.cc    linux0224.com

测试的访问的结果

先自己动手测试,看看新的网站是否可以访问

访问旧的网站

-----下面是讲解

1. 我们访问 laoliu.cc旧的网站时
根据配置文件
rewrite / http://linux0224.com permanent;


2.就会跳转到linux0224 的配置文件当中
linux0224.conf的文件中

3.浏览器就会自动的跳转到新的网站当中来了  。


302的实际的用法 (redirect)

临时的跳转

302 ,域名的临时的跳转,一般是结合业务的临时的修改
临时的跳转,一般都是企业内部的活页域名,不是二级域名的修改,

# 基于访问路径的url
# 跳转到3级域名的活动页面的操作
# location 和rewrite 的基本的玩法,就差不多了

www.oldpage.cc/phone 旧的域名

跳转到3级域名 302

phone.oldpage.cc

换这个参数,就是302临时的跳转

rewrite / http://linux0224.com rediect;


先看旧的虚拟的主机

server {
    listen 80;
    server_name www.laoliulinux.cc;
    # 添加匹配的活页url
    # 本次是302参数 redirect
    location /phone {
   		 rewrite / http://phone.laoliulinux.cc redirect;
    }
}

# 让用户去访问 www.laoliulinux.cc/phone
自动跳转到 
http://phone.laoliulinux.cc这个新域名

测试配置文件是否正确

[root@web-8 /opt/nginx-1-19-0/conf/extra]#nginx -t
nginx: the configuration file /opt/nginx-1-19-0/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx-1-19-0/conf/nginx.conf test is successful
[root@web-8 /opt/nginx-1-19-0/conf/extra]#nginx -s reload
[root@web-8 /opt/nginx-1-19-0/conf/extra]#
#

测试客户端的访问

先测试新网站是否正确

做好dns解析
10.0.0.8   laoliulinux.cc linux0224.com  phone.laoliulinux.cc   www.laoliulinux.cc

看到这,没问题的扣6  看不懂7

访问旧网站,看一看是否会302跳转


rewrite 中的break和last参数

在虚拟主机中,可以定义多个location 来处理多个url,进行多个动作的设置

www.yzk.com/home/xxxx
www.yzk.com/moive/xxxx

多个location之间可以基于  last , break 去设置匹配的规则,比较高级
知道语法即可。


redirct 和 perment都是在client客户端实现url的更新

nginx的rewrite    ----》last和break都是在server内部中发生跟新的。
client的url不会发生变化

last用法

可以从 location{} > location {} > location {}进行多次的匹配

访问AAA,重写到BBB 重写到CCC都是服务器内部的跳转

访问A -> 跳到B -> 最后到C

配置文件

# 创建测试的数据用于查看url内部跳转的效果,以保持url的参数

#1.创建测试数据
mkdir -p /linux0224/
echo 'i am ccc,  how are you ~~~' > /linux0224/hello.html


# 2.配置的文件
server {
    listen 30000;
    server_name _;

    #
    location /CCC {
        alias /linux0224/;
    }

    location /BBB {
        rewrite ^/BBB/(.*)$ /CCC/$1 last;
    }

    location /AAA {

        rewrite ^/AAA/(.*)$ /BBB/$1 last;
    }

}

图解跳转的关系,第一次的跳转

1. location /AAA{}
访问10.0.0.9:30000/AAA/yzk.jpg

2. rewrite ^/AAA/(.*)$  中的提取数据赚到了 /BBB/$1  last;
$1 去提取前面的(.*)里面的内容

3. 服务器内部的跳转,访问的其实是
10.0.0.9:30000/BBB/xixi.jpg

第二次跳转,最终访问的效果、

1~  10.0.0.9:3000/AAA/xixi.jpg
    跳转到-> 10.0.0.9:3000/BBB/xixi.jpg
2~  last 会让rewrite往后进行匹配,读取下一个rewrite的设置
	
3~ 最终会跳到 CCC

break参数

break是在本条规则匹配完毕后,终止匹配,不再匹配后面的location{};

表示中断匹配,访问到AAA资源后,只rewrite跳转一次,终止后续的跳转。

# 创建测试数据,用于查看url内部跳转效果,以及保持了url的参数

配置文件如下

server {
    listen 31000;
    server_name _;

    #
    location /CCC {
        root /www/;
        index index.html;
    }

    location /BBB {
      root /www/;
        index index.html;
        rewrite ^/BBB/(.*)$ /CCC/$1 last;
    }

    location /AAA {
        root /www/;
        index index.html;
        rewrite ^/AAA/(.*)$ /BBB/$1 break;
    }

}

说白了break和python一样退出循环的一样

给我停下来。

posted @ 2025-04-19 22:33  国家一级冲浪yzk  阅读(45)  评论(0)    收藏  举报