Rewrite实例

2019-09-26  本文已影响0人  UncleZ_strive

1.什么是Rewrite

实现url地址重写或url地址跳转

2.Rewrite相关模块

set设置变量
if 负责语句中的判断
return 返回返回值或url
break终止后续的rewrite规则
rewrite重定向url

将用户请求url.com.cn重新定向到url.com/zh

[root@web1 conf.d]# cat url.oldboy.com.conf 
server {
    listen 80;
    server_name url.com.cn;
    set $language zh;
    rewrite ^/$ http://url.com/$language;
}   
server {
    listen 80;
    server_name url.com;
    location / {
        root /data;
}
}

将用户请求url.com.jp跳转到url.com/jp

[root@web1 conf.d]# cat url.oldboy.com.conf 
server {
    listen 80;
    server_name url.com.jp;


    if ($http_host ~* cn){
    set $language zh;
}
    if ($http_host ~* jp){
    set $language jp;
}
    rewrite ^/$ http://url.com/$language;
}   
server {
    listen 80;
    server_name url.com;
    location / {
        root /data;
}
}

根据用户浏览器使用的不同语言,跳转到不同的语言界面

[root@web1 conf.d]# cat language.conf 
server {
    listen 80;
    server_name yy.com;

    location / {
        if ($http_accept_language ~* en){
        set $language en;
        }
        if ($http_accept_language ~* zh){
        set $language zh;
}
}
        root /data/$language;
}
server {
    listen 80;
    server_name yy.com;

    location / {
        if ($request_uri ~* "^/test"){
            return 200 "zifuchuan";
}   
        if ($request_uri ~* "git"){
            return 403;
}
        if ($request_uri ~* "al=3526"){
            return 302 "https://www.jd.com";
    }   
}   
}

server {
    listen 80;
    server_name url.oldxu.com;
    root /code;

    location / {
        rewrite /1.html /2.html 
    break;
        rewrite /2.html /3.html;
    }

    location /2.html {
        rewrite /2.html /a.html;
    }

    location /3.html {
        rewrite /3.html /b.html;
    }
}

3.rewrite语法示例

         关键字     正则      替代内容       flag标记
Syntax: rewrite     regex    replacement     [flag];
              跳转  :
              重定向:
server {
    listen 80;
    server_name url.oldboy.com;
    root /data;

    set $language /default;
    if ( $http_accept_language ~* zh ) {
        set $language /zh;
    }
    if ( $http_accept_language ~* en ) {
        set $language /en;
    }
    if ( $http_accept_language ~* ja ) {
        set $language /jp;
    }

    rewrite ^/$ $language;
    
    location / {
        index index.html;
    }
}

永久维护

rewrite ^(.*)$ /wh.png break;

临时维护

#error_page 403 404 500 502 /wh.png;
#error_page 403 404 500 502 http://$http_host;

error_page 403 404 500 502 @temperror;                    直接跳到主页
location @temperror {
        rewrite ^(.*)$ https://jd.com;               跳转到京东
}

eg:

[root@web1 conf.d]# cat eg.conf 
server {
    listen 80;
    server_name rurl.com;
    root /data; 
    if ($http_user_agent ~* "android|iphone|ipad"){
        rewrite ^/$ http://m.com;
}
}
第一种方法:location
[root@web1 conf.d]# cat eg.conf 
server {
    listen 80;
    server_name rurl.com;

    location / {
        rewrite ^(.*)$ https://xuliangwei.com;
       #return 302 https://xuliangwei.com;
}
}

第二种方法:if
[root@web1 conf.d]# cat eg.conf 
server {
    listen 80;
    server_name rurl.com;
    root /data;

    if ($request_uri ~* "^/test"){
        return 302 https://www.xuliangwei.com;
}
    location / {
        index index.html;
}
}

flag

last #本条规则匹配完成后,继续向下匹配新的location URI规则 (开发| 伪静态)
break #本条规则匹配完成即终止,不再匹配后面的任何规则 (挂维护页)
redirect #返回302临时重定向, 地址栏会显示跳转后的地址
permanent #返回301永久重定向, 地址栏会显示跳转后的地址

跳转
        redirect    302     临时跳转     旧网站无影响,新网站无排名
        permanent   301     永久跳转     新跳转网站有排名,旧网站排名清空
        
        http  ---> https   302      浏览器不会记住新域名
        http  ---> https   301      浏览器会记录新域名
        
    last        #本条规则匹配完成后,继续向下匹配新的location URI规则
    break       #本条规则匹配完成即终止,不再匹配后面的任何规则
    
    当rewrite规则遇到break后,本location{}与其他location{}的所有rewrite或者
return规则都不再执行。
    当rewrite规则遇到last后,本location{}里后续rewrite/return规则不执行,但
重写后的url再次从头开始执行所有规则,哪个匹配执行哪个。

需求: 公司网站在停机维护时,指定的IP能够正常访问,其他的IP跳转到维护页。10.0.0.1
[root@web01 conf.d]# cat s.oldboy.com.conf 
server {
    listen 80;
    server_name s.oldboy.com;
    root /data;

    set $ip 0;
    if ($remote_addr ~* "10.0.0.1|10.0.0.100"){
        set $ip 1;
    }

    if ($ip = "0"){
        rewrite ^(.*)/$ /wh.png break;
    }


    location / {
        index index.html;
    }
}
需求:公司网站后台/admin,只允许公司的出口公网IP可以访问,其他的IP访问全部返回500,或直接跳转至首页
server {
        listen 80;
        server_name s.oldboy.com;
        root /code;

        location /admin {
        if ($remote_addr != "10.0.0.1") {
         rewrite ^(.*)$  http://$http_host;
}

        index index.html;
}
        location / {
        index index.html;
}
}
上一篇 下一篇

猜你喜欢

热点阅读