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一样退出循环的一样
给我停下来。
浙公网安备 33010602011771号