前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx ngx_http_rewrite_module模块详解(四)

Nginx ngx_http_rewrite_module模块详解(四)

作者头像
咻一咻
发布2020-05-29 15:32:32
6900
发布2020-05-29 15:32:32
举报
文章被收录于专栏:咻一咻咻一咻

ngx_http_rewrite_module

模块功能

The ngx_http_rewrite_modulemodule is used to change request URI using PCRE regular expressions, return redirects, and conditionally select configurations. 将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换

目标实现:

代码语言:javascript
复制
    http://www.a.com/hn 
        --> http://www.a.com/henan 
    http://www.a.com  
        -->https://www.a.com/
代码语言:javascript
复制
1、rewrite regex replacement [flag] 
    将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI 
    可用位置:server, location, if
    注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查 
    隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制 
    如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端 
    301:永久重定向

    [flag]:
        last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环,不建议在lation中使用 
        break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用 
        redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头,使用相对路径,状态码:302 
        permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301

2、return 
    return code [text]; 
    return code URL; 
    return URL; 
    停止处理,并返回给客户端指定的响应码
    可用位置:server, location, if

3、rewrite_log on | off; 
    是否开启重写日志, 发送至error_log(notice level)
    可用位置:http, server, location, if

4、set $variable value; 
    用户自定义变量
    注意:变量定义和调用都要以$开头
    可用位置:server, location, if

5、if (condition) { ... } 
    引入新的上下文,条件满足时,执行配置块中的配置指令;
    可用位置:server, location 
    condition:比较操作符: 
        ==   #相同 
        !=   #不同 
        ~    #模式匹配,区分字符大小写 
        ~*   #模式匹配,不区分字符大小写 
        !~   #模式不匹配,区分字符大小写 
        !~*  #模式不匹配,不区分字符大小写 
    文件及目录存在性判断: 
        -e, !-e  #存在(包括文件,目录,软链接) 
        -f, !-f  #文件 
        -d, !-d  #目录 
        -x, !-x  #执行

示例模板1:

代码语言:javascript
复制
[root@centos7 conf.d]#vim vhosts.conf 
server {
        server_name www.a.com;
        root /data/web3/;
        location /bbs {
                rewrite ^/bbs(.*)$  /forum$1 last; #正则表达式后向引用
        }
}
效果:
    http://www.a.com/bbs
        --> http://www.a.com/forum/

示例模板2:永久重定向:http跳转到https

代码语言:javascript
复制
[root@centos7 conf.d]#vim vhosts.conf 
server{
    listen 80;
    listen 443 ssl;
    server_name www.c.com;
    root /data/web3/;
    ssl on;
    ssl_certificate /etc/nginx/conf.d/b.crt;
    ssl_certificate_key /etc/nginx/conf.d/bb.key;
    ssl_session_cache shared:sslcache:20m;
    ssl_session_timeout 10m;
    location / {
        if ($scheme = http ){
            rewrite /  https://www.c.com/ permanent;
        }
    }
}

示例模板3:访问url包含admin时禁止访问

代码语言:javascript
复制
server{
        listen 80;
        listen 443 ssl;
        server_name www.c.com;
        root /data/web3/;
        ssl on;
        ssl_certificate /etc/nginx/conf.d/b.crt;
        ssl_certificate_key /etc/nginx/conf.d/bb.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
        location / {
                if ($uri ~* .*admin.* ){
                        return 403 "nonnonononono";
                }
        }
}

ngx_http_rewrite_module模块 详细说明请参考官网 地址链接

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ngx_http_rewrite_module
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档