原文地址,非常感謝育瓜!
比如葫隙,http://baidu.com/sina/search/hello.com
我想截取sina后面的路徑作為代理,就可以這么寫
location ^~ /sina/{
if ($request_uri ~ /sina/(.+))
{
set $rightUrl $1;
}
proxy_pass http://127.0.0.1:8080/$rightUrl;
}
假設(shè)你想截取兩個(gè)字符串之間的字符躏仇,可以這么寫
我想截取(http://baidu.com/test/AcenterB)A和B之間的字符:
location ^~ /test/{
? ? ? ? if ($request_uri ~ A(.*?)B )
? ? ? ? {
? ? ? ? ? ? ? ? set $center $1;
? ? ? ? }
? ? ? ? proxy_pass http://127.0.0.1:8080/$center;
}
最終可以截取到center
location語(yǔ)法規(guī)則
? ? ? ??location [=|~|~*|^~|@] /uri/ { ... }? location分為兩個(gè)部分
? ? ? ? [=|~|~*|^~|@] 第一個(gè)部分??
= : 表示精確匹配后面的url
~ : 表示正則匹配恋脚,但是區(qū)分大小寫
~* : 正則匹配腺办,不區(qū)分大小寫
^~ : 表示普通字符匹配,如果該選項(xiàng)匹配,只匹配該選項(xiàng).不匹配別的選項(xiàng),一般用來匹配目錄
@ : "@" 定義一個(gè)命名的 location糟描,使用在內(nèi)部定向時(shí)怀喉,例如 error_page
= 是精確完整匹配, 且優(yōu)先級(jí)最高
正則匹配時(shí),如果 ~ 和 ^~ 同時(shí)匹配規(guī)則船响,則 ^~ 優(yōu)先
^~ 這個(gè)不會(huì)匹配請(qǐng)求url中后面的路徑, 如上面的 /test/hello 沒有匹配上
^~ 不支持正則躬拢,和=相比,范圍更廣见间, hellowo 是可以被^~匹配聊闯,但是 = 不會(huì)匹配
~ 路徑中只要包含就可以匹配,如上面的 /test/hellowo 返回了602
? ? ? ??/uri/ 第二個(gè)部分
? ? ? ? ? ??這里主要填的就是需要匹配的path路徑,根據(jù)前面的符號(hào),這里可以填寫精確的path路徑.也可以填正則表達(dá)式,下面則主要針對(duì)正則進(jìn)行說明
. : 匹配除換行符以外的任意字符
? : 重復(fù)0次或1次
+ : 重復(fù)1次或更多次
* : 重復(fù)0次或更多次
\d :匹配數(shù)字
^ : 匹配字符串的開始
$ : 匹配字符串的介紹
{n} : 重復(fù)n次
{n,} : 重復(fù)n次或更多次
[c] : 匹配單個(gè)字符c
[a-z] : 匹配a-z小寫字母的任意一個(gè)
小括號(hào)()之間匹配的內(nèi)容,可以在后面通過$1來引用,$2表示的是前面第二個(gè)()里的內(nèi)容.正則里面容易讓人困惑的是\轉(zhuǎn)義特殊字符米诉。