nginx rewrite規則
解決問題:業務及研發無法處理的時候,需要運維這邊輔助路由規則。
實現方法:nginx rewrite
知識了解:
正則表達式匹配
~ 區分大小寫匹配
~ 不區分大小寫匹配
!~區分大小寫不匹配
!~不區分大小寫不匹配
rewrite指令的最後一項參數為flag標記,支持的flag標記主要有以下幾種:
last :相當於Apache裏德(L)標記,表示完成rewrite;
break;本條規則匹配完成後,終止匹配,不再匹配後面的規則
redirect:返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址
permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉後的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 客戶端請求到達的服務器的名稱
$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規則