Nginx Rewrite实例

一、基于域名的跳转

公司旧域名www.old.com有业务需求有变更,需要使用新域名www.new.com代替。

  • 要求:
    旧域名不能废除
    从旧域名跳转到新域名上,且保持其参数不变
  • 实验过程:
    1.配置新旧域名的DNS
    www.old.com 192.168.10.30
    www.new.com 192.168.10.30
    2.更改配置文件内容,添加域名跳转,如果访问www.old.com,则跳转到www.new.com
    新域名
  • 实操:

1.修改配置文件
添加重定向

[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.old.com;
        if ($host = 'www.old.com'){                 ##添加重写
        rewrite ^/(.*)$ http://www.new.com/$1 permanent;
        }
        charset utf-8;

        access_log  logs/old.com.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
}

添加的新域名

server {
        listen       80;
        server_name  www.new.com;
        charset utf-8;
        access_log  /var/log/nginx/www.new.com-access.log  main;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
     }

2.绑定域名检查语法并重启服务

[root@server ~]# vi /etc/hosts
192.168.10.30       www.old.com   www.new.com        ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

3.访问www.old.com,会自动跳转www.new.com,并且返回码为301重定向
在这里插入图片描述

二、基于客户端IP地址

因公司业务测试,所有其他IP访问公司网站都显示维护页面,只有公司IP访问正常
假设服务器IP为192.168.10.30,公司IP为192.168.10.50
1.修改配置文件,添加重定向

[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.old.com;
        set $rewrite true;                  ###判断标志$rewrite
        if ($remote_addr = "192.168.10.50") {       #允许公司内部访问,更改标志位false(这样不会执行下面if判断的rewrite了)
              set $rewrite false;
              }
        if ($rewrite = true) {
              rewrite (.+) /new.html;            ##如果不是公司IP,则重定向到维护页面
              }
        charset utf-8;

        access_log  logs/old.com.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        }

2.检查语法并重启服务

[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

4.添加一个维护网页

[root@server ~]# vi /usr/local/nginx/html/new.html
Website is Maintaining,Please visit later!!!

3.测试验证
使用192.168.10.50主机访问www.old.com,可以访问原网页,(要在/etc/hosts里添加域名绑定192.168.10.30 www.old.com)
在这里插入图片描述
使用其他主机访问www.old.com,不可以访问原网页,会重定向到维护页面
在这里插入图片描述

三、基于旧、新域名跳转并加目录

将域名www.old.com下的所有发帖都跳转到www.new.com/old,且域名跳转后保持参数不变
添加重定向
1.修改配置文件

[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.old.com;
        location /first {
                rewrite (.+) http://www.new.com/old$1 permanent;
                }
        charset utf-8;

        access_log  logs/old.com.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        }

添加新域名

server {
                listen  80;
                server_name www.new.com;
                charset utf-8;
                access_log /var/log/nginx/new.com.access.log main;
        location / {
                root /opt/share/nginx/html;
                index   index.html index.htm;
        }
        }

2.绑定域名检查语法并重启服务

[root@server ~]# vi /etc/hosts
192.168.10.30       www.old.com   www.new.com        ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

3.在/usr/local/nginx/html/下创建一个first目录,并写入一个网页
[root@server ~]# mkdir -p /usr/local/nginx/html/first/
[root@server ~]# vi /usr/local/nginx/html/first/1.html
This is old!!!
4.创建新域名的目录并把原来旧的网页文件1.html复制到/opt/share/nginx/html/old/下
[root@server ~]# mkdir -p /opt/share/nginx/html/old/
[root@server ~]# cp -r /usr/local/nginx/html/first/ /opt/share/nginx/html/old/
[root@server ~]# cat /opt/share/nginx/html/old/first/1.html
This is old!!!
5.访问www.old.com/first/1.html跳转到www.new.com/old/first/1.html,且域名跳转后保持参数不变
在这里插入图片描述

四、基于参数匹配的跳转

现在访问http://www.test.com/100-(100|200)-100.html
跳转到http://www.test.com页面。
1.修改配置文件

[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.test.com;

       if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
       rewrite (.*) http://www.test.com permanent;
       }

        charset utf-8;

        access_log  logs/test.com.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

2.检查语法并重启服务

[root@server ~]# vi /etc/hosts
192.168.10.30       www.test.com        ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

3.访问www.test.com/100-100-10.html,会跳转www.test.com
在这里插入图片描述
访问www.test.com/100-300-10.html,超出匹配范围不会跳转www.test.com
在这里插入图片描述

五、基于目录下所有php文件跳转

访问http://www.test.com/upload/1.php跳转到首页
1.修改配置文件

[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.test.com;

        location ~* /upload/.*\.php$ {
             rewrite (.+) http://www.test.com permanent;
        }

        charset utf-8;

        access_log  logs/test.com.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

2.检查语法并重启服务

[root@server ~]# vi /etc/hosts
192.168.10.30       www.test.com        ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

3.访问http://www.test.com/upload/1.php,会跳转www.test.com
在这里插入图片描述

六、基于最普通url请求的跳转

访问一个具体的页面跳转到首页,如浏览器访问http://www.test.com/1/test.html跳转到首页。
1.修改配置文件

[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.test.com;

        location ~* ^/1/test.html {
           rewrite (.+) http://www.test.com permanent;
        }

        charset utf-8;

        access_log  logs/test.com.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

2.检查语法并重启服务

[root@server ~]# vi /etc/hosts
192.168.10.30       www.test.com        ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

3.访问http://www.test.com/1/test.html,会跳转www.test.com
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值