一、rewrite 基本概述
rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。
二、rewrite使用场景
1、地址跳转,用户访问www.drz.com这个URL是,将其定向至一个新的域名mobile.drz.com
2、协议跳转,用户通过http协议请求网站时,将其重新跳转至https协议方式
3、伪静态,将动态页面显示为静态页面方式的一种技术,便于搜索引擎的录入,同时建上动态URL地址对外暴露过多的参数,提升更高的安全性。
4、搜索引擎,SEO优化依赖于url路径,好记的url便于智齿搜索引擎录入
三、rewrite配置语法
Syntax: rewrite regex replacement [flag]; Default: — Context: server, location, if #一般用于切换维护场景 rewrite ^(.*)$ /page/404.html last;
四、rewrite标记 flag
flag | 作用 |
last | 本条规则匹配完成后,停止匹配,不再匹配后面的规则 |
break | 本条规则匹配完成后,停止匹配,不再匹配后面的规则 |
redirect | 返回302临时重定向,地址栏会显示跳转后的地址 |
permanent | 返回301永久重定向,地址栏会显示跳转后的地址 |
五、last和break的区别
break 只要匹配到规则,就回去本地路径目录中寻找请求的文件;
last 匹配到规则,跳转后没有内容,则带着跳转后的请求,重新的向server发起一次请求
break请求:
1.请求rw.linux.com/break;
2.首先,会去查找本地的/code/rewrite/test/index.html;
3.如果找到了,则返回/code/rewrite/test/index.html内容;
4.如果没有找到则返回404,找到目录却没有主页,则返回403;
last请求:
1.请求rw.linux.com/last;
2.首先,会去查找本地的/code/rewrite/test/index.html;
3.如果找到了,则返回/code/rewrite/test/index.html内容;
4.如果没找到,会带着新跳转的URI再向server发起一次请求,请求rw.linux.com/test;
5.如果匹配到新的location,则返回该location匹配的内容;
6.如果没有匹配到新的,则再返回404或403;
六、redirect和permanent的区别
redirect:
每次请求都会询问服务器,是否跳转,如果服务器不可用,则跳转失败
permanent:
请求一次后,会记录跳转的地址,以后不再询问,直接跳转,通过浏览器缓存记录
七、rewriter规则实践
在写rewrite规则之前,我们需要开启rewrite日志对规则的匹配进行调式。
[root@web01 code]# vim /etc/nginx/nginx.conf /var/log/nginx/error.log notice; http{ rewrite_log on; }
1.rewrite的匹配规则
a.先执行server块的rewrite指令
b.其次执行location匹配规则
c.最后执行location中的rewrite
2.大多数用于http协议转https协议
server { listen 80; server_name www.lixian.fun; return 302 https://$server_name$request_uri; }
$request_filename 请求的文件路径名(带网站的主目录/code/images/test.jpg)
$request_uri 当前请求的文件路径(不带网站的主目录/images/test.jpg)
3.如何更加规范的书写rewrite规则
server { listen 80; server_name www.lixian.fun lixian.fun; if ($http_host = lixian.fun){ rewrite (.*) http://www.lixian.fun$1; } }