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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49780168/article/details/110450005