您的位置 首页 nginx

Rewrite规则实践 以及实战应用案例(变量使用)

在写rewrite规则之前,我们需要开启rewrite日志对规则的匹配进行调试。

[root@web01 code]# vim /etc/nginx/nginx.conf


http{
    rewrite_log on;
}
案例一

用户访问/abc/1.html实际上真实访问的是/ccc/bbb/2.html

#http://www.baimei.com/abc/1.html  ==>  http://www.baimei.com/ccc/bbb/2.html

#1.准备真实访问路径
[root@web03 ~]# mkdir /code/ccc/bbb -p
[root@web03 ~]# echo "ccc_bbb_2" > /code/ccc/bbb/2.html

#2.Nginx跳转配置
[root@web03 ~]# cd /etc/nginx/conf.d/
[root@web03 conf.d]# cat ccbb.conf 
server {
        listen 80;

        location / {
                root /code;
                index index.html;
        }
        location /abc {
                rewrite (.*) /ccc/bbb/2.html redirect;
                #return 302 /ccc/bbb/2.html;
        }
}

#3.重启Nginx服务
[root@web03 conf.d]# nginx -t

[root@web03 conf.d]# nginx -s reload

 

 

 

案例二

用户访问/2018/ccc/2.html实际上真实访问的是/2014/ccc/bbb/2.html

##http://www.baimei.com/2018/ccc/2.html  ==>  http://www.baimei.com/2014/ccc/bbb/2.html

#1.准备真是的访问路径
[root@web03 conf.c]# mkdir /code/2014/ccc/bbb -p 
[root@web03 conf.c]# echo "2014_ccc_bbb_2" > /code/2014/ccc/bbb/2.html

#2.Nginx跳转配置
[root@web03 conf.d]# cat ccbb.conf 
server {
        listen 80;

        location / {
                root /code;
                index index.html;
        }
        location /2018 {
                rewrite ^/2018/(.*)$ /2014/$1 redirect;
        }
}

#3.重启nginx服务
[root@web03 conf.d]# nginx -t

[root@web03 conf.d]# nginx -s reload
案例三

用户访问/test实际上真实访问的是www.baimeidashu.com

#1.Nginx跳转配置
[root@web03 conf.d]# cat test.conf 
server {
        listen 80;

        location /test {
                rewrite (.*) https://www.baimeidashu.com redirect;
        }
}

#2.重启nginx服务
[root@web03 conf.d]# nginx -s reload

 

案例四 wordpress地址改写 案例

用户访问couese-11-22-33.html实际上真实访问的是/course/11/22/33/course_33.html

#http://www.lzy.com/couese-11-22-33.html  ==>  http://www.lzy.com/course/11/22/33/course_33.html

#1.准备真实的访问路径
[root@web03 ~]# mkdir /code/course/11/22/33 -p
[root@web03 ~]# echo "curl docs.etiantian.org" > /code/course/11/22/33/course_33.html

#2.Nginx跳转配置
[root@web03 conf.d]# cat test.conf 
server {
        listen 80;
        root /code;
        index index.html;
        location / {
                #灵活配法
                rewrite ^/course-(.*)-(.*)-(.*).html$ /course/$1/$2/$3/course_$3.html redirect;
                #固定配法
                #rewrite ^/course-(.*) /course/11/22/33/course_33.html redirect;
        }
}

#3.重启nginx服务
[root@web03 conf.d]# nginx -s reload

 

案例五

http请求跳转到https

#Nginx跳转配置
server {
        listen 80;
        server_name www.baimei.com;
        rewrite ^(.*) https://$server_name$1 redirect;
        #return 302 https://$server_name$request_uri;
}       

server {
        listen 443;
        server_name www.baimei.com;
        ssl on;
}

 

错误页跳转

server {
        listen 80;
        root /code;
        location /test {
                rewrite (.*) https://www.baimeidashu.com redirect;
        }

        error_page 403 404 500 501 502 @error_test;
        location @error_test {
        rewrite ^(.*)$ /404.html break;
        }
}

变量使用

 

案例1:需要在跳转后的请求行加上想要的参数&showoffline=1
server {
    listen 80;
    server_name test.baimei.com;
    # $args为Nginx内置变量请求行的参数
    set $args "&showoffline=1";
    location / {
    root /code;
    index index.html;
    }
    if ($remote_addr = 10.0.0.1 ){
    rewrite (.*) http://test.baimei.com$1;
    }

}
案例2:网站维护,指定IP正常访问,其他IP跳转维护页面
server {
    listen 80;
    server_name test.baimei.com;
    root /code;
    charset utf-8,gbk;

    location / {
        index index.html;
        set $ip 0;       # 设置变量为0
        if ($remote_addr = "10.0.0.1"){
            set $ip 1;   # 如果来源IP为0.1则设置为1
        }
        if ($ip = 0){    # 判断如果变量为0 则跳转维护页面
            rewirte ^(.*)$ /wh.html break;
        }
    }


}

Nginx内置参数

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章