认识一下Nginx中的Rewrite的重定向

691 阅读2分钟

简介: Rewrite是Nginx服务器提供的一个重要的功能,它可以实现URL重定向功能。

一: 地址重写和地址转发的含义与区别

地址重写地址转发是两个不同的概念。

地址重写 是为了实现地址的标准化,比如我们可以在地址栏中中输入 www.baidu.com. 我们也可以输入 www.baidu.cn. 最后都会被重写到 www.baidu.com 上。浏览器的地址栏也会显示www.baidu.com。

地址转发:它是指在网络数据传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址并将数据转发到最近的局域网的过程。

因此地址重写和地址转发有以下不同点:

  1. 地址重写会改变浏览器中的地址,使之变成重写成浏览器最新的地址。而地址转发他是不会改变浏览器的地址的。
  2. 地址重写会产生两次请求,而地址转发只会有一次请求。
  3. 地址转发一般发生在同一站点项目内部,而地址重写且不受限制。
  4. 地址转发的速度比地址重定向快。

二: 理解 Rewrite指令 使用

该指令是通过正则表达式的使用来改变URI。可以同时存在一个或多个指令。需要按照顺序依次对URL进行匹配和处理。

该指令可以在server块或location块中配置,其基本语法结构如下:

rewrite regex replacement [flag];

rewrite的含义:该指令是实现URL重写的指令。
regex的含义:用于匹配URI的正则表达式。
replacement:将regex正则匹配到的内容替换成 replacement。
flag: flag标记。

flag有如下值:

last:  本条规则匹配完成后,继续向下匹配新的location URI 规则。(不常用)
break:  本条规则匹配完成即终止,不再匹配后面的任何规则(不常用)。
redirect:  返回302临时重定向,浏览器地址会显示跳转新的URL地址。
permanent:  返回301永久重定向。浏览器地址会显示跳转新的URL地址。

比如如下列子:

rewrite ^/(.*) http://www.baidu.com/$1 permanent;

说明:
rewrite 为固定关键字,表示开始进行rewrite匹配规则。
regex 为 ^/(.*)。 这是一个正则表达式,匹配完整的域名和后面的路径地址。
replacement就是 www.baidu.com/$1 这块了,其中1是取regex部分()里面的内容。如果匹配成功后跳转到的URLflag 就是permanent,代表永久重定向的含义,即跳转到http://www.baidu.com/1是取regex部分()里面的内容。如果匹配成功后跳转到的URL。 **flag** 就是 permanent,代表永久重定向的含义,即跳转到 http://www.baidu.com/1 地址上。