nginx rewrite

介绍rewrite之前先说一下一些相关的操作指令。

if指令

if指令用来支持条件判断,其语法结构如下:

if (condition) {...}

{…}中的为满足条件时要执行的配置设置。
if指令可存在于server块和location块中,可以使用以下符号进行比较判断:

=       等于
!=      不等于
~      大小写敏感的模糊匹配
~*     大小写不敏感的模糊匹配
-f      请求的文件是否存在
-d      请求的目录是否存在
-e      请求的文件或目录是否存在
-x      请求的文件是否可执行
每个操作具有"非"权限,如"!~"、"!-f"等

例如判断用户的浏览器是否为IE(比较新的IE版本已经匹配不到了),则可以使用以下方式:

if ($http_user_agent ~ MSIE) {...}

根据用户请求方式的不同而使用不同的配置:

if ($request_method = GET) {...}
if ($request_method = POST) {...}

break指令

break指令可存在于server块、location块、if块中,作用是直接跳出当前作用域,在存在break的作用域中,break之前的配置生效,break之后的配置将不会生效。

return指令

return指令用于完成对请求的处理,直接向客户端返回相关信息,处于该指令后的nginx配置都是无效的,该指令可用于server块、location块、if块中。
支持以下语法结构:

return [text]   #返回给客户端的响应体内容,可使用变量
return code URL;    #返回给客户端的HTTP状态码
return URL;     #返回给客户端的URL地址

rewrite指令

rewrite指令是实际用来进行rewrite功能配置的具体指令,使用正则表达式的方法来改变URI,可同时存在1个或多个指令,按照顺序依次进行处理。
rewrite指令可以在server块或location块中进行配置,语法结构如下:

rewrite regex replacement [flag];

参数说明:
regex:正则表达式,使用()标记要截取的内容,使用$1~$9获取截取到的内容;

replacement:匹配成功后用于替换被截取内容的字符串,即重写后的地址,如果该字符串是由http(s)开头的,则直接返回此URI给客户端,不再继续向下处理。

flag:设置rewrite对URI的处理行为,有4种标志可设置,分别为:
    last:终止继续在本location块中处理URI,将重写后的URI重新在server块中执行,提供了重写后的URI转入到其它location块中的机会;
    break:重写后的URI继续在本location块中执行,不会转入到其它的location块中;
    redirect:重写后的URI返回给客户端,状态代码为203,指明是临时重定向URI,主要用在replacement不是以http(s)开头的情况下;
    permanent:重写后的URI返回给客户端,状态代码为301,指明是永久重定向URI;

set指令

set指令用来设置新的变量,语法结构如下:

set $variable value

示例

下面来看一些具体的例子:
例1

server {
        listen 7777;
        if ($http_user_agent !~ MSIE) {
            rewrite ^/ http://10.0.0.33/Api$uri;
        }
}

$uri是全局变量,与$document_uri含义相同,截取的都是host后的部份。
chrome访问”http://10.0.0.1:7777/a.php?num=99“,会被rewrite成”http://10.0.0.33/Api/a.php?num=99“。

例2

server {
    listen 7777;
    if ($request_method = GET) {
        rewrite ^/ http://10.0.0.33/get$uri;
    }
}

访问”http://10.0.0.1:7777/a.php?cc=9c9c“,会被rewrite成”http://10.0.0.33/get/a.php?cc=9c9c“。

例3

server {
        listen 7777;
        location ^~ /Api
        {
                rewrite ^/Api(.*) http://10.0.0.33/mapi$1;
        }

        location ^~ /User
        {
                rewrite ^/User(.*) http://10.0.0.33/ss$1;
        }

}

使用http://10.0.0.1:7777/Api/a.php进行请求访问,会被重写为http://10.0.0.33/mapi/a.php。同样,使用http://10.0.0.1:7777/User/b.php进行请求访问,会被重写为http://10.0.0.33/ss/b.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值