1.Rewrite简述
Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。
2.Rewrite使用场景
(1)地址跳转,用户访问一个URL,将其定向到另一个URL。
(2)协议跳转,用户通过http协议请求网站时,将其重新跳转至HTTPS协议方式。
(3)伪静态,动态页面静态化,为了搜素引擎收录。
(4)搜索引擎,SEO优化依赖于url路径,好记的url便于支持搜索引擎录入。
3.Rewrite标记
flag | 规则 |
last | 停止当前匹配,并重新发送请求 |
barek | 终止匹配,不发送新的请求 |
redirector | 临时跳转,关闭nginx请求就不跳转了,302 |
premanent | 永久跳转,访问过一次就不会访问原站了,301,第一次请求会保存缓存到浏览器中,通过浏览器缓存跳转 |
4.修改配置文件,准备代码文件进行测试last与break
[root@Web01 conf.d]# vim rewrite.conf
server {listen 80;server_name rewrite.boss.com;root /code/rewrite/;location / {rewrite /1.html /2.html;rewrite /2.html /3.html;}location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;
"rewrite.conf" 18L, 343C written
[root@Web01 conf.d]# systemctl restart nginx
[root@Web01 conf.d]# mkdir -p /code/rewrite
[root@Web01 conf.d]# echo 1.html > /code/rewrite/1.html
[root@Web01 conf.d]# echo 2.html > /code/rewrite/2.html
[root@Web01 conf.d]# echo 3.html > /code/rewrite/3.html
[root@Web01 conf.d]# echo a.html > /code/rewrite/a.html
[root@Web01 conf.d]# echo b.html > /code/rewrite/b.html
访问rewrite.boss.com后发现访问1.html,实际重定向到b.html。
5.rewrite添加last标记
[root@Web01 conf.d]# vim rewrite.conf
server {listen 80;server_name rewrite.boss.com;root /code/rewrite/;location / {rewrite /1.html /2.html last;rewrite /2.html /3.html;}location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;
"rewrite.conf" 18L, 348C written
[root@Web01 conf.d]# systemctl restart nginx
访问发现跳过了当前location,进行下一location重定向,最终跳转到a.html。
6.rewrite添加down标记
[root@Web01 conf.d]# vim rewrite.conf
server {listen 80;server_name rewrite.boss.com;root /code/rewrite/;location / {rewrite /1.html /2.html break;rewrite /2.html /3.html;}location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;
"rewrite.conf" 18L, 349C written
[root@Web01 conf.d]# systemctl restart nginx
break后不再进行重定向操作,最终定向到2.html。
7.redirect与oermanent测试
[root@Web01 conf.d]# vim rewrite.conf
server {listen 80;server_name rewrite.boss.com;root /code;location /test {#临时重定向rewrite ^(.*)$ http://www.boss.vip redirect; #return 302 http://www.boss.vip#永久重定向#rewrite ^(.*)$ http://www.boss.vip permanent; #return 301 http://www.boss.vip;}
}
~
~
"rewrite.conf" 12L, 356C written
[root@Web01 conf.d]# systemctl restart nginx
访问rewrite.boss.com/test,定向到www.boss.vip。
8.rewrite使用案例
(1)开启rewrite日志对规则进行匹配调试
[root@Web01 conf.d]# mkdir -p /code/rewrite/ccc/bbb/
[root@Web01 conf.d]# echo '/ccc/bbb/2.html' > /code/rewrite/ccc/bbb/2.html
[root@Web01 conf.d]# vim rewrite.conf
server {listen 80;server_name rewrite.boss.com;root /code/rewrite;location /abc {rewrite (.*) /ccc/bbb/2.html redirect;#return 302 /ccc/bbb/2.html}
}
~
~
~
~
~
"rewrite.conf" 10L, 217C written
[root@Web01 conf.d]# systemctl restart nginx
(2)用户访问/2018/ccc/bbb/2.html实际上真实访问的是/2023/ccc/bbb.2.html
[root@Web01 conf.d]# mkdir -p /code/rewrite/2023/ccc/bbb/
[root@Web01 conf.d]# echo '/2023/ccc/bbb/2.html' > /code/rewrite/2023/ccc/bbb/2.html
[root@Web01 conf.d]# vim rewrite.conf
server {listen 80;server_name rewrite.boss.com;root /code/rewrite;location /2018 {rewrite ^/2018/(.*) /2023/$1 redirect;}
}
~
~
~
~
~
~
"rewrite.conf" 9L, 188C written
[root@Web01 conf.d]# systemctl restart nginx
(3)用户访问/test实际上访问的是https://www.boss.vip
[root@Web01 conf.d]# vim rewrite.conf
server {listen 80;server_name rewrite.boss.com;location /test {rewrite (.*) https://www.boss.vip redirect;}
}
~
~
~
~
~
~
~
"rewrite.conf" 8L, 154C written
[root@Web01 conf.d]# systemctl restart nginx