前言
rewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记实现URL重写以及重定向
例如:更换域名后需要保持旧的域名能够转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求
rewrite只能放在server{},location{},if{}中,并且默认只能对域名后面的除去传递的参数外的字符串起作用
例如:http://www.xjj.com/a/we/index.php?id=1&u=str 只对/a/we/index.php重写
一、rewrite跳转实现
- Nginx:通过ngx_http_rewrite_module模块支持URL重写、支持if条件判断,但不支持else
- 跳转:从一个location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
- PCRE支持:perl兼容正则表达式的语法规则匹配
- 重写模块set指令:创建新的变量并为其赋值
二、rewrite执行顺序
- 执行server快里面的rewriter指令
- 执行location匹配
- 执行选定的location中的rewrite指令
三、rewrite跳转场景
- 调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求
- 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务
- 网址换新域名后,让旧的访问跳转到新的域名上;例如,访问京东的 360buy.com 会跳转到 jd.com
- 服务端某些业务调整,比如根据特殊变量、目录、客户端的信息进行URL调整等