美文网首页
Rewrite实例

Rewrite实例

作者: UncleZ_strive | 来源:发表于2019-09-26 15:39 被阅读0次

1.什么是Rewrite

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

2.Rewrite相关模块

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

  • set示例一:

将用户请求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;
}
}
  • if 示例二

将用户请求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;
}
  • return示例三
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";
    }   
}   
}

  • break示例四
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:

  • 用户通过手机访问url.com 跳转到m.com

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

相关文章

  • Rewrite实例

    1.什么是Rewrite 实现url地址重写或url地址跳转 2.Rewrite相关模块 set设置变量if 负...

  • Nginx rewrite 实例

    全站http 自动跳转 https 基于通信安全,全站在不影响用户访问的前提下实现 http 自动跳转 https...

  • Nginx 学习之旅 | Nginx URL 重写

    URL rewrite 介绍 rewrite模块(ngx_http_rewrite_module)Rewrite功...

  • 44笔记---nginx

    今日内容 单机实现静态分离 集群实现动静态分离 Rewrite跳转 2.url重写实例 请求url.lsc.com...

  • Nginx 提高篇

    Rewrite的使用 Rewrite通过ngx_http_rewrite_module模块支持url重写、支持if...

  • nginx location URL匹配规则

    nginx rewrite语法 rewrite regex replacement [flag]; regex: ...

  • Nginx-11 地址重写 rewrite

    一、什么是Rewrite ​ Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重...

  • 八、地址重写

    一、什么是Rewrite ​ Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重定向...

  • nginx--rewrite

    URL重写(rewrite)介绍 rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能...

  • nginx笔记(三)

    1.rewrite Syntax:rewrite regex replacement [flag];Default...

网友评论

      本文标题:Rewrite实例

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