需求:研发偶尔提出一些路由跳转需求。
解决问题:业务及研发无法处理的时候,需要运维这边辅助路由规则。
实现方法:nginx rewrite
知识了解:
正则表达式匹配
~ 区分大小写匹配
~* 不区分大小写匹配
!~区分大小写不匹配
!~*不区分大小写不匹配

rewrite指令的最后一项参数为flag标记,支持的flag标记主要有以下几种:
last :相当于Apache里德(L)标记,表示完成rewrite;
break;本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
last和break用来实现URL重写,浏览器地址栏URL地址不变

$host: 存放了请求url中的主机字段,比如比如http://www.myweb.name/server/source?arg1=value1&arg2=value2中的www.myweb.name。如果请求中的主机部分字段不可用或者为空,则存放nginx配置中该server块中server_name指令的配置值

$requset_uri 当前请求的uri,并且带有指令
$query_string $args含义相同
$server_addr 服务器的地址
$server_name 客户端请求到达的服务器的名称
$request_method 存放了客户端的请求方式,如get,post等
$document_uri 请求中的uri,不包含请求指令 ,比如比如http://www.myweb.name/server/source?arg1=value1&arg2=value2中的/server/source
$args 存放了请求url中的请求指令。比如http://www.myweb.name/server/source?arg1=value1&arg2=value2中的arg1=value1&arg2=value2

案例一:http跳到https
解决:

server {
    rewrite ^(.*)$  https://$host$1 permanent; 
}

案例二: 测试域名跳到正式域名
http://www-t.lemon.cn的访问 跳转到 http://www.lemon.cn
解决:

if ($host ~* ^www-t.mallcoo.cn$) {
     rewrite ^(.*)$ http://www.lemon.cn$1 permanent;
}

案例三: 访问单域名跳转到指定目录
解决:

if ($host ~* ^www.lemon.cn$) {
                rewrite ^/$ http://$host/zabbix/;
        }   

案例四:(链接带问号的跳转)
http://www.lemon.cn/test/p?gid=8488&_mid=127 重定向到:http://www.lemon.cn/user/usercenter?_mid=127
解决:

 if ( $request_uri ~* "^/test/p\?gid=8488&_mid=(\d+)") {
                set $myarg1 $1;
                rewrite .* http://www.lemon.cn/user/usercenter?_mid=$myarg1? permanent;
                }

案例五:(链接带问号的跳转)
http://www.abc.com/a/b?id=123 的一条链接转换成 http://www.abc.com/p-123.html
解决:

        if ($request_uri ~* "^/a/b\?id=(\d+)$") {
                set $myarg1 $1;
                rewrite .* http://www.abc.com/p-$myarg1.html? permanent;
        }