nginx12-rewrite模块

1.概述

1.nginx通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else2.该模块需要PCRE支持,应在编译nginx时指定PCRE支持。
3.根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,
  不过这样的循环最多可以执行10次,超过后nginx将返回500错误。
4.重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,
  如记录条件标识、传递参数到其他location、记录做了什么等等。
5.学习rewrite之前要对正则表达式要很熟悉;

2.rewrite 语法格式

2.1 格式

rewrite regex replacement [flag];

应用场景

server, location, if

2.2 语法解析

1.regex 为上面匹配到的uri中的内容
2.replacement 为要替换的uril内容
3.[flag] 为匹配后的地址处理方式(详见下面2.3 flag解释)

2.3 flag

2.3.1 基本概念

1.last,完成该rewrite规则的执行后,停止处理后续rewrite指令集;
  然后查找匹配改变后URI的新location;
2.break,完成该rewrite规则的执行后,停止处理后续rewrite指令集,并不再重新查找;
  但是当前location内剩余非rewrite语句和location外的的非rewrite语句可以执行;
3.redirect,返回302临时重定向,地址栏会显示跳转后的地址; 
  replacement 如果不包含协议,仍然是一个新的的URI,那么就用新的URI匹配的location去处理请求,不会返回30x跳转。
  但是redirect参数可以让这种情况也返回30x(默认302)状态码,就像新的URI包含http://和https://等一样。
  这样的话,浏览器看到302,就会再发起一次请求,真正返回响应结果的就是这第二个请求。
4.permanent,返回301永久重定向,地址栏会显示跳转后的地址;
  即表示如果客户端不清理浏览器缓存,那么返回的结果将永久保存在客户端浏览器中了。

2.3.2 区别

1.last一般写在server和if中,
  而break一般使用在location中;
2.last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,
  而break终止重写后的匹配;
3.break和last都能组织继续执行后面的rewrite指令。

猜你喜欢

转载自blog.csdn.net/u014636209/article/details/82696746
今日推荐