Nginx Rewrite配置

一、Rewrite概述

1.Rewrite规则的作用
Rewrite又称地址重定向,可以对实现url的重写,以及重定向

2.Rewrite跳转场景

  • URL看起来更规范,合理
  • 企业会将动态URL地址伪装为静态地址提供服务
  • 网址换新域名后,让旧的访问跳转到新的域名上
  • 服务端某些业务调整

3.Rewrite实际场景

3.1 Nginx跳转需求的实现方式

  • 使用rewrite进行匹配跳转
  • 使用if匹配全局变量后跳转
  • 使用location匹配在跳转

3.2 Rewrite放在server{},if{},location{}段中(比较重要,需牢记)

  • location只对域名后边的除去传递参数外的字符串起作用

3.3 对域名或参数字符串

  • 使用if全局变量匹配
  • 使用proxy_pass反向代理

二、Nginx正则表达式

1.常用的正则表达式元字符

在这里插入图片描述

2.正则匹配的常用表达式

在这里插入图片描述

三、Rewrite命令

1.命令语法

 rewrite       <regex>       <replacement>           [flag];
              正则            跳转后的内容              rewrite支持的flag标记

flag标记说明
在这里插入图片描述

2.last和break比较

在这里插入图片描述

四、location概述

1.location的匹配

location = patt {
    
    }  [精确匹配]
location patt{
    
    }      [一般匹配]
location  ~patt{
    
    }   [正则匹配]

2.location优先级

相同类型的表达式,字符串的会优先匹配
按优先级排列

  • = 类型
  • ^~ 类型表达式
  • 正则表达式(~ 和 ~*)类型
  • 常规字符串匹配的类型,按前缀匹配
  • 通用匹配(/),如果没有其他匹配,任何请求都会匹配到

注:执行顺序是从上到下

3.location优先级规则

3.1 相同点

  • 都能实现跳转

3.2 不同点

  • rewrite是在同一域名内更改获取资源的路径
  • location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器

3.3 rewrite会卸载location里,执行顺序

  • 执行server块里面的rewrite指令
  • 执行locationpipei
  • 执行选定的location中的rewrite指令

五、应用示例

注:每做一个功能后记得初始化Nginx环境,避免前面的功能与后面的配置文件冲突

1.基于域名的跳转

现在公司旧域名www.fa.com有业务需求有变更,需要使用新域名www.newfa.com代替。

先去本机的C:\Windows\System32\drivers\etc中的hosts文件中添加IP与新的域名
注:如保存不了就另存到桌面上,删除文件中的文本,把桌面上的复制过来,hosts的后缀.txt记得去掉,然后重启服务

1.修改默认站点位置

vi /etc/nginx.conf
nginx  -t    #检查语法

添加:
server {
    
    
        listen       80;
        server_name  localhost;
        if ($host = 'www.fa.com')
        {
    
    
            rewrite ^/(.*)$ http://www.newfa.com/$1 permanent;
        }

在这里插入图片描述
2.添加新域名www.netfa.com的站点位置(末尾加)

vi /usr/local/nginx/conf/nginx.conf
nginx   -t

添加:
server {
    
    
        listen 80;
        server_name www.newfa.com;
        charset utf-8;
        access_log /var/log/nginx/www.newfa.com-access.log main;
        location / {
    
    
            root /usr/share/nginx/html;
            index index.html index.htm;
        }
    }
[root@server1 ~]mkdir /var/log/nginx
[root@server1 ~]mkdir -p /usr/share/nginx/html
[root@server1 ~]echo "Hello Fa" > /usr/share/nginx/html/index.html
[root@server1 ~]# systemctl restart nginx

测试:
www.netfa.com
在这里插入图片描述

2.基于客户端IP访问

其他IP访问公司网站都显示维护页面,只有公司IP访问正常
假设服务器IP为20.0.0.14,公司IP为20.0.0.13

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

[root@server1 ~]# vi /etc/nginx.conf

添加:
server {
    
    
        listen       80;
        server_name  www.fa.com;
        set $rewrite true;                  ###判断标志$rewrite
        if ($remote_addr = "20.0.0.13") {
    
           #允许公司内部访问,更改标志位false(这样不会执行下面if判断的rewrite了)
              set $rewrite false;
              }
        if ($rewrite = true) {
    
    
              rewrite (.+) /newfa.html;            ##如果不是公司IP,则重定向到维护页面
              }
        charset utf-8;

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

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

在这里插入图片描述
2.检查语法与创建虚拟ip

[root@server1 ~]# vi /etc/hosts
20.0.0.13       www.fa.com   www.newfa.com        
[root@server1 ~]# nginx -t
[root@server1 ~]# ifconfig ens33:1  20.0.0.19
[root@server1 ~]# ifconfig
[root@server1 ~]# systemctl restart nginx

在这里插入图片描述
3.添加一个维护网页

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

测试:
使用20.0.0.13主机访问www.old.com,可以访问原网页
在这里插入图片描述

使用其他主机访问直接会提示维护中在这里插入图片描述

3.基于旧域名与新域名跳转并加目录

将域名www.fa.com下的所有发帖都跳转到www.newfa.com/fa,且域名跳转后保持参数不变

1.添加重定向

[root@server1 ~]# vi /etc/nginx.conf 
[root@server1 ~]# nginx -t

在这里插入图片描述

2.末尾添加新域名

[root@server1 ~]# vi /etc/nginx.conf 
[root@server1 ~]# nginx -t

在这里插入图片描述
3.在服务器里创建fa内页面

[root@server1 html]# vi /etc/nginx.conf 
[root@server1 html]# systemctl restart nginx
[root@server1 html]# cd
[root@server1 ~]# cd /usr/local/nginx/html/
[root@server1 html]# mkdir -p fa/post
[root@server1 html]# cd fa/post
[root@server1 post]# vi 1.html
[root@server1 post]# cat 1.html
添加:
Hello  work!
[root@server1 post]# cat /etc/hosts
添加:
20.0.0.13  www.fa.com  www.newfa.com

测试:
http://www.fa.com/post/1.html 会自动跳转到www.newfa.com新页面
在这里插入图片描述

4.基于参数匹配的跳转

1.修改配置文件

[root@server ~]# vi /etc/nginx.conf

添加:
server {
    
    
        listen       80;
        server_name  www.newfa.com;

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

        charset utf-8;

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

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

2.检查语法

[root@server ~]# vi /etc/hosts
20.0.0.13       www.newfa.com       
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

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

5.基于目录下所有php文件跳转

访问http://www.newfa.com/upload/1.php跳转到首页

1.修改配置文件

[root@server ~]# vi /etc/nginx.conf

添加:
server {
    
    
        listen       80;
        server_name  www.newfa.com;

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

        charset utf-8;

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

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

在这里插入图片描述
2.检查语法

[root@server ~]# vi /etc/hosts
20.0.0.13       www.newfa.com      
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

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

6.基于最普通url请求的跳转

访问一个具体的页面跳转到首页,如浏览器访问http://www.newfa.com/1/newfa.html跳转到首页

1.修改配置文件

[root@server ~]# vi /etc/nginx.conf

添加:
server {
    
    
        listen       80;
        server_name  www.newfa.com;

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

        charset utf-8;

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

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

在这里插入图片描述
2.检查语法并重启服务

[root@server ~]# vi /etc/hosts
20.0.0.13       www.newfa.com       
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx

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

猜你喜欢

转载自blog.csdn.net/F2001523/article/details/110462139