重写规则可以实现url的重写和重定向,支持if条件判断,不支持else,nginxrewrite官网。语法server{rewrite{regularrule}{directionalpath}{rewritetype};}rewrite类型有:last:匹配到这条规则后,继续向下匹配新的locationURL规则,一般用于server和if。浏览器的地址栏保持不变。break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。浏览器地址栏不改变redirect:返回302临时重定向,浏览器地址会显示重定向后的URL地址。permanent:返回301永久重定向,浏览器地址会显示重定向后的URL地址。常用的正则表达式^:匹配输入字符串的开头$:匹配输入字符串的结尾_:匹配前一个字符零次或多次。例如,“ol_”可以匹配“o”和“ol”,“oll”-:匹配前一个字符一次或多次。例如“ol+”可以匹配“ol”和“oll”、“olll”,但不能匹配“o”?:匹配前面的字符零次或一次,例如“do(es)?”可以匹配“do”或“does”、“?”等同于“{0.1}”。:匹配除“\n”以外的任意单个字符,匹配包括“\n”在内的任意字符,如“{.\n}”\:将后面的字符标记为特殊字符或作为文字字符或作为反向引用。例如“\n”匹配换行符,而“$”匹配“$”\d:匹配纯数字\s:匹配任意空字符、空格或制表符{n}:重复n次{n,}:重复n次或多次{n,m}:重复n到m次[]:定义匹配字符范围[c]:匹配单个字符c[a-z]:匹配a-z中任意一个小写字母[a-zA-Z0-9]:匹配所有大小写字母或数字():表达式的起始位置和结束位置|:OR运算符的执行顺序如下:1.在server块中执行rewrite指令。2.进行位置匹配。3.在所选位置执行重写命令。其他常见的重写全局变量:$host:表示请求主机头字段或主机名$remote_addr:表示客户端IP$request_uri:包含请求参数的原始URI,不包括主机名,如http://www。bennet.com/abc/index.php?a=1&b=2$uriin/abc/index.html?a=1&b=2:这个变量指的是当前请求的URI,不包括任何参数,比如:/abc/index.html$document_uri:同$uri,该变量是指当前请求的URI,不包括任何传递的参数,如:/abc/index.html$1:一般用在if语句中,表示匹配的内容之前重写正则表达式,一般用在location中表示位置1后面的location变量,http跳转httpsserver{listen80;服务器名称abc.com;位置^~/{重写^(.*)$https://$host$1永久;}}2、根据旧域名跳转到新域名,并在其后添加一个目录#/post跳转到/bbs/postlocation/post{rewrite^(.*)$$scheme://$host/bbs$1永久;#这里$1是位置变量,代表/post}3.频道统计服务器提供接口/api/v1/access,终端用户可以通过浏览器、公众号、Apps访问。为了根据不同的渠道统计访问次数,我们在终端调用接口的时候给每个分配一个编号。浏览器页面:10000公众号内页:20000App页面操作:30000location~/([0-9]+)/(.*)${rewrite/([0-9]+)/(.*)$/$2休息;proxy_passhttp://127.0.0.1:9090;}$2表示路径中正则表达式匹配的第二个参数,即(.*)部分,最后终端的界面变成/10000/api/v1/access,最后nginx将请求记录同步到ELK(Elasticsearch-Logstash-Kibana)等解决方案,完成统计。参考:了解nginx的rewrite模块NginxRewriteandLocation
