妙博客

主机评测 香港服务器 洛杉矶VPS测评

nginx反向代理,截取部分url,截取两个字符串之间的字符

比如,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;
}


假设你想截取两个字符串之间的字符,可以这么写

我想截取(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语法规则

        location [=|~|~*|^~|@] /uri/ { ... }  location分为两个部分

        [=|~|~*|^~|@] 第一个部分  

           = : 表示精确匹配后面的url
           ~ : 表示正则匹配,但是区分大小写
           ~* : 正则匹配,不区分大小写
           ^~ : 表示普通字符匹配,如果该选项匹配,只匹配该选项.不匹配别的选项,一般用来匹配目录
          @ : "@" 定义一个命名的 location,使用在内部定向时,例如 error_page


           = 是精确完整匹配, 且优先级最高
          正则匹配时,如果 ~ 和 ^~ 同时匹配规则,则 ^~ 优先
           ^~ 这个不会匹配请求url中后面的路径, 如上面的 /test/hello 没有匹配上
          ^~ 不支持正则,和=相比,范围更广, hellowo 是可以被^~匹配,但是 = 不会匹配
          ~ 路径中只要包含就可以匹配,如上面的 /test/hellowo 返回了602

        /uri/ 第二个部分

            这里主要填的就是需要匹配的path路径,根据前面的符号,这里可以填写精确的path路径.也可以填正则表达式,下面则主要针对正则进行说明

            . : 匹配除换行符以外的任意字符
            ? : 重复0次或1次
            + : 重复1次或更多次
            * : 重复0次或更多次
           \d :匹配数字
           ^ : 匹配字符串的开始
          $ : 匹配字符串的介绍
         {n} : 重复n次
         {n,} : 重复n次或更多次
         [c] : 匹配单个字符c
         [a-z] : 匹配a-z小写字母的任意一个
        小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容.正则里面容易让人困惑的是\转义特殊字符。


Copyright Your 142132.com Rights Reserved. 赣ICP备17010829号-2