美文网首页
第四十四天 Rewrite

第四十四天 Rewrite

作者: 杨小倪 | 来源:发表于2019-09-26 16:38 被阅读0次

第四十四天 Rewrite

1.什么是Rewrite

Rewrite主要是实现url地址重写,以及地址重定向,就是将用户请求的web服务器的地址重新定向到其他 url 的过程

2.Rewrite使用场景

  • 1.地址跳转:用户访问www.xuliangwei.com/class这个URL时,将其定向至一个新的域名class.xuliangwei.com
  • 2.协议跳转:用户通过http协议请求网站时,将其冲i性能跳转至https协议访问
  • 3.伪静态:将动态页面显示为静态页面方式的一种技术,便于搜索引擎的录入,同时减少动态URL地址对外暴露过多的参数,提高安全性
  • 4.搜索引擎,SEO优化依赖于URL路径,当我们的URL过于繁琐时,重新定向URL,便于记忆,支持搜索引擎的录入

3.Rewrite语法

#rewrite表达式可以应用在server,location, if标签下
Syntax: rewrite regex replacement [flag];
Default: --
Context: server, location, if


rewrite:固定格式

regex: 正则表达式

replacement:重写后的URL

flag: 重写状态标记

#用于切换维护页面场景
#rewrite ^(.*)$ /page/wh.html break;

4.Rewrite URL重写配置场景

1.根据不同URL跳转不同的页面

[root@web01 conf.d]# cat url.oldxu.com.conf 
server {
    listen 80;
    server_name url.oldxu.com.cn url.oldxu.com.jp;
    
    #判断
    if ( $http_host ~* cn ) {
        set $language zh;
    }
    if ( $http_host ~* ja ) {
        set $language jp;
    }
    rewrite ^/$ http://url.oldxu.com/$language/;
}

server {
    listen 80;
    server_name url.oldxu.com;

    location / {
        root /data;
    }
}

[root@web01 ~]# mkdir /data
[root@web01 ~]# mkdir /data/{zh,en,jp}
[root@web01 ~]# echo "北京欢迎你" > /data/zh/index.html
[root@web01 ~]# echo "English" > /data/en/index.html
[root@web01 ~]# echo "小日本" > /data/jp/index.html

[root@web01 ~]# systemctl restart nginx

2.根据不同的语言跳转不同的页面

[root@web01 conf.d]# cat url.oldxu.com.conf
server {
    listen 80;
    server_name url.oldxu.com;

    location / {
        if ( $http_accept_language ~* "en" ) {
            set $language en;
        }
        if ( $http_accept_language ~* "zh|zh-CN" ) {
            set $language zh;
        }

        root /data/$language;
    }
}

[root@web01 ~]# mkdir /data
[root@web01 ~]# mkdir /data/{zh,en,jp}
[root@web01 ~]# echo "北京欢迎你" > /data/zh/index.html
[root@web01 ~]# echo "English" > /data/en/index.html
[root@web01 ~]# echo "小日本" > /data/jp/index.html

[root@web01 ~]# systemctl restart nginx

3.return 根据不同的uri 返回不同的状态码

[root@web01 conf.d]# cat url.oldxu.com.conf

server {
    listen 80;
    server_name url.oldxu.com;

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

4.break last

last 停止处理后续rewrite指令集,然后对当前重写的新URI在rewrite指令集上重新查找。
break 停止处理后续rewrite指令集,并不在重新查找

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;
    }
} 
[root@web01]# echo "1.html" >/code/1.html
[root@web01]# echo "2.html" >/code/2.html
[root@web01]# echo "3.html" >/code/3.html
[root@web01]# echo "a.html" >/code/a.html
[root@web01]# echo "b.html" >/code/b.html

return

return 状态码
return 状态码 字符串
return 状态码 URL  (301  302)




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

5.根据不同的语言,跳转不同的URl

server {
    listen 80;
    server_name url.oldxu.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;
    }
}

6.永久维护

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

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


    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;
    }
}

7.临时维护

######临时维护(jd)
    #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 ^(.*)$ http://$http_host;
    }

8.用户通过手机设备访问url.oldxu.com,跳转至url.oldxu.com/m

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

    if ($http_user_agent ~* "android|iphone|ipad") {
            rewrite ^/$ /m;
    }
}

9.用户通过手机设备访问url.oldxu.com,跳转至m.oldxu.com

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

    if ($http_user_agent ~* "android|iphone|ipad") {
        rewrite ^/$  http://m.oldxu.com;
    }
}
server {
    listen 80;
    server_name m.oldxu.com;
    root /data/m;
    
    location / {
        index index.html;
    }
}

10.用户访问oldxu.com/test,跳转至https://xuliangwei.com

location 方式

server {
        listen 80;
        server_name url.oldxu.com;
        root /data;
        
        location /test {
                #rewrite ^(.*)$ https://www.xuliangwei.com/;
                return 302 https://www.xuliangwei.com/;
        }

        location / {
            index index.html;
        }
    }

if 方式

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

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

5. rewrite场景实力

需求: 用户访问course-11-22-33.html实际上真实访问是/course/11/22/33/course_33.html

[root@web01 conf.d]# cat url.oldxu.com.conf 
server {
    listen 80;
    server_name url.oldxu.com;
    root /data;
    location /  {
        index index.html;
                #用户访问的url       #文件真实位置
        rewrite ^/(.*)-(.*)-(.*)-(.*).html /$1/$2/$3/$4/$1_$4.html;
    }
}

相关文章

网友评论

      本文标题:第四十四天 Rewrite

      本文链接:https://www.haomeiwen.com/subject/pslnuctx.html