在nginx的配置中熊户,是否對rewrite的配置模糊不清萍膛,還有令人迷惑的
$1、$2...
參數嚷堡,(其實$1蝗罗、$2
參數在shell腳本中經常用到艇棕,用來承接傳遞的參數)。本篇從反向代理配置的角度幫助理解一下
1串塑、先看一個nginx配置
rewrite ^/(user_\d)/(\d).html$ https://$host/?$1 permanent;
上面是我寫的重寫規(guī)則沼琉,先說$代表的是參數,所以一定是 ()
包含的
()
: 用于匹配括號之間的內容桩匪,通過$1
打瘪、$2
調用$1
就是user_\d
$2
就是\d
舉個例子
https://www.example.com/user_1/2.html
這里$1
就是 user_1
$2
就是2
這實際上就是正則在nginx里面的運用, 下面看一下 正則 的規(guī)則傻昙,會幫助你理解??
2闺骚、正則
2.1、replace
stringObject.replace(regexp/substr, replacement)
replacement 可以是字符串妆档,也可以是函數僻爽。如果它是字符串,那么每個匹配都將由字符串替換过吻。但是 replacement
中的 $
字符具有特定的含義进泼。如下表所示,它說明從模式匹配得到的字符串將用于替換纤虽。
字符 | 替換文本 |
---|---|
2绞惦、...逼纸、$99 | 與 regexp 中的第 1 到第 99 個子表達式相匹配的文本。 |
$& | 與 regexp 相匹配的子串济蝉。 |
$` | 位于匹配子串左側的文本杰刽。 |
$' | 位于匹配子串右側的文本。 |
$$ | 直接量符號王滤。 |
2.2贺嫂、正則匹配重寫例子
- 參數匹配,互換位置
name = "Tom, Jerry";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
'Jerry Tom'
- 參數獲取
var str = '/pgk/api/pgk-abc'
var reg = /^\/pgk(.*)$/
str.replace(reg, "$1") // '/api/pgk-abc'
var str = '/pgk/api/pgk-abc/n/abc'
var reg = /^\/pgk\/api\/pgk-abc\/(.*)$/
str.replace(reg, "$1") // 'n/abc'
3雁乡、生產配置示例
下面是工作中的實際配置, 重寫系統(tǒng)簡稱 ABC
location /ABC/api/pgk-abc/ {
rewrite ^/ABC/(.*)$ /$1 break;
proxy_pass http://ip:port;
# 這里重寫掉 ABC , $1 就是 api/pgk-abc/
# 實際請求地址是: http://ip:port/api/pgk-abc/
proxy_http_version 1.1;
}
本篇完第喳, rewrite 相關的還有 break、last踱稍、permanent曲饱、redirect參數,下期繼續(xù)分享珠月。
我是 甜點cc?
微信公眾號:【看見另一種可能】
熱愛前端開發(fā)扩淀,也喜歡專研各種跟本職工作關系不大的技術,技術啤挎、產品興趣廣泛且濃厚驻谆。本號主要致力于分享個人經驗總結,希望可以給一小部分人一些微小幫助。
希望能和大家一起努力營造一個良好的學習氛圍胜臊,為了個人和家庭政供、為了我國的互聯網物聯網技術、數字化轉型瞎饲、數字經濟發(fā)展做一點點貢獻伯诬。數風流人物還看中國、看今朝织盼、看你我杨何。