1. 程式人生 > >nginx rewrite規則

nginx rewrite規則

nginx rewrite 帶問號

需求:研發偶爾提出一些路由跳轉需求。
解決問題:業務及研發無法處理的時候,需要運維這邊輔助路由規則。
實現方法: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;
        }

nginx rewrite規則