nginx rewrite概述
跳转场景
URL看起来更规范合理
企业将动态URL地址伪装成静态地址提供服务
网址换新域名后,让旧的访问网址跳转到新的域名上
服务端某些业务调整
跳转实现
跳转实现方式
使用rewrite进行匹配跳转
使用if匹配全局变量后跳转
使用location匹配再跳转
rewrite放在server{},if{},location{}段中
location只对域名后边的出去传递参数外的字符串起作用
对域名或参数字符串
使用if全局变量匹配
使用proxy_pass反向代理
nginx正则表达式
rewrite命令
rewrite命令语法
rewrite (正则) (跳转后的内容) [flag] (rewrite支持的flag标记);
flag标记说明
last和break比较
location
分类
location = patt {} [精准匹配]
location patt {} [一般匹配]
location ~ patt {} [正则匹配]
正则匹配常用的表达式
location 优先级
相同类型的表达式,字符串长的会优先匹配
按优先级排列
=类型
^~类型表达式
正则表达式(和*)类型
常用字符串匹配类型、按前缀匹配(一般匹配)
通用匹配(/),如果没有其它匹配,任何请求都会匹配到
location优先级规则
匹配某个具体文件
(location = 完整路径)> (location ^~ 完整路径) > (location ~* 完整路径)= (location ~ 完整路径)> (location 完整路径) > (location /)
用目录做匹配访问某个文件
(location = 目录)> (location ^~ 目录/)> (location ~ 目录) = (location ~* 目录)> (location 目录) > (location /)
比较rewrite和location
都可以进行跳转
不同
rewrite是在同一域名内更改获取资源的路径
location是对一类路径做控制访问或反向代理,还可以proxy_pass到其它机器
rewrite会写在location里,执行顺序
执行server块里面的rewrite指令
执行location匹配
执行选定的location中的rewrite指令
基本应用
1
有新域名代替旧域名,在不能废除旧域名的情况下,从旧域名跳转到新域名,且保持参数不变
创建日志mkdir /var/log/nginx
创建网页文件
2
基于客户端ip地址的跳转
vi /etc/nginx.conf
编辑要重定向的网页
vi /usr/local/nginx/html/new.html
再20主机下
再其他主机下
3
将域名bbs.ph.com下的所有发帖都跳转到www.ph.com,且域名跳转后保持参数不变
vi /etc/nginx.conf
在服务器里创建bbs内的网页
添加映射
重启后访问测试
4
基于参数匹配的跳转
vi /etc/nginx.conf
访问www.nph.com/100-100-10.html,会跳转www.nph.com
访问www.nph.com/100-300-10.html,超出匹配范围不会跳转www.nph.com
5
基于目录下所有php文件跳转
vi /etc/nginx.conf
重启后测试
基于最普通url请求的跳转
vi /etc/hosts
重启后测试
访问http://www.nph.com/1/new.html,会跳转www.nph.com