配置Nginx的Rewrite-------(rewrite语法、location相关知识、访问跳转)

一、Nginx Rewrite概述

1.1 Rewrite跳转场景

URL看起来更规范、合理

企业会将动态url地址伪装成静态地址提供服务

网址换新域名后,让旧的访问跳转到新的域名上

服务端某些业务调整

1.2 Rewrite跳转实现

nginx-----支持url重写、支持if条件判断,但不支持else
跳转------循环最多可以执行10次,超过后nginx将返回500代码错误
rewrite------使用nginx’全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向

1.3 Rewrite实际场景

nginx跳转需求的实现方式
●使用rewrite进行匹配跳转
●使用if匹配全局变量后跳转
●使用location匹配再跳转

■rewrite放在 server{},if{},location{}段中

对域名或参数字符串
●使用if全局变量匹配
●使用proxy_pass反向代理

三、location分类

3.1 分类

location = patt {} [精准匹配]
location = patt {} [一般匹配]
●location = patt {} [正则匹配]

3.2 location优先级

■相同类型的表达式,字符串长的会优先匹配

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

■location优先级的示例

3.3 location优先级规则

■匹配某个具体文件
●(location = 完整路径)> (location ^~ 完整路径)> (location ~* 完整路径) > (location ~ 完整路径) > (location 完整路径) > (location /)

■用目录做匹配访问某个文件
●(location = 目录)> (location ^~ 目录/)> (location ~ 目录) > (location ~* 目录) > (location 目录) > (location /)

3.4 比较rewrite 和location

相同点:都能实现跳转

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

■rewrite会写在location里,执行顺序
●执行server块里面的rewrite指令
●执行location匹配
●执行选定的location中的rewrite指令

四、应用场景测试

4.1 基于域名的跳转

公司旧域名www.51xit.top,因业务需求有变更,需要使用新域名www.52xit.top代替
●不能废除旧域名
●从旧域名跳转到新域名,且保持其参数不变
■在windows里的hosts文件中做映射关系
在这里插入图片描述

#先另起一台服务器20.0.0.12,做一个测试网页
[root@www ~]# vi /usr/local/nginx/html/index.html
<html>
<head>
<p><em>这是一个测试网页!</em></p>
</body>
</html>
#再开一台20.0.0.11,修改配置
[root@www ~]# vi /usr/local/nginx/conf/nginx.conf
 location / {
          root   html;
            index  index.html index.htm;
        if ($host = 'www.51xit.top') {
        rewrite ^/(.*)$ http://www.52xit.top/$1 permanent;
        }
        }
[root@www ~]# killall -s HUP nginx   #重启

■打开windows浏览器,输入www.51xit.top,会跳到www.52xit.top上
在这里插入图片描述

4.2 基于客户端IP访问跳转

■今天公司业务版本上线,所有IP访问任何内容都显示一个固定维护页面,只有公司IP(192.168.100.1)访问正常

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
...
    server {
        listen       80;
        server_name  www.51xit.top;    #改域名
        charset utf-8;               #改字符集
        access_log  /usr/local/nginx/logs/www.51xit.top.access.log;  #改日志存储路径 去掉main
        set $rewrite true;   #设置是否合法的IP标志
       
        if ($remote_addr = "192.168.100.1"){   #改客户机的IP地址
                set $rewrite false;
        }
        if ($rewrite = true){
                rewrite (.*) /wh.html;  #跳转到wh.html
        }
        
        location = /wh.html {
                root /usr/local/nginx/html;  ##存放路径
        }
        
        location / {
           root html;
           index index.html index.htm;
       }
[root@www ~]# killall -s HUP nginx   #重启
[root@www ~]# echo "网页维护中,请联系管理员" >/usr/local/nginx/html/wh.html

■测试,打开windows浏览器(192.168.100.1),输入192.168.100.20,正常访问;登录客户机192.168.100.100,浏览器输入www.51xit.top,提示"网页维护中,请联系管理员"

4.3 基于旧,新域名的跳转

■现在访问的是http://www.51xit.top/post/,现在需要将这个域名下面的发帖都跳转到http://www.52xit.top/bbs,注意保持域名跳转后的参数不变

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
...
    server {
        listen       80;
        server_name  www.51xit.top;    #改域名
        charset utf-8;               #改字符集
        access_log  /usr/local/nginx/logs/www.51xit.top.access.log;  #改日志存储路径 去掉main
         localtion /post {	
                rewrite (.+) http://www.52xit.top/bbs$1 permanent;
        }
[root@www ~]# killall -s HUP nginx   #重启

■测试,输入www.51xit.top/post,显示www.52xit.top/bbs

4.4 基于参数匹配的跳转

■例如现在访问http://www.51xit.top/100-(100|200)-100.html跳转到http://www.51xit.top页面

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
...
    server {
        listen       80;
        server_name  www.51xit.top;    #改域名
        charset utf-8;               #改字符集
        access_log  /usr/local/nginx/logs/www.51xit.top.access.log;  #改日志存储路径 去掉main
   if ($request_uri ~ ^/100-(100|200)-(\d+).html$){
                rewrite (.*) http://www.51xit.top permanent;
        }     
[root@www ~]# killall -s HUP nginx   #重启        

■测试:浏览器输入http://www.51xit.top/100-100-100.html ,页面显示http://www.51xit.top
浏览器输入http://www.51xit.top/100-200-10.html ,页面显示http://www.51xit.top
浏览器输入http://www.51xit.top/100-100-100dddd.html ,页面不能跳转

4.5 基于最普通URL请求的跳转

■访问一个具体的页面跳转到首页

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
...
    server {
        listen       80;
        server_name  www.51xit.top;    #改域名
        charset utf-8;               #改字符集
        access_log  /usr/local/nginx/logs/www.51xit.top.access.log;  #改日志存储路径 去掉main
  location ~* ^/1/test.html {
                rewrite (.+) http://www.51xit.top permanent;
        }    
 [root@www ~]# killall -s HUP nginx   #重启    

■测试:浏览器输入http://www.51xit.top/1/test.html ,页面显示http://www.51xit.top

4.6 访问任意一个页面跳转到首页,即http://www.51xit.top/upload/1.php

[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
...
    server {
        listen       80;
        server_name  www.51xit.top;    #改域名
        charset utf-8;               #改字符集
        access_log  /usr/local/nginx/logs/www.51xit.top.access.log;  #改日志存储路径 去掉main
  location ~* /upload/.*\.php$ {
                rewrite (.+) http://www.51xit.top permanent;
        }    
 [root@www ~]# killall -s HUP nginx   #重启    

■测试:浏览器输入http://www.51xit.top/upload/1.php ,页面显示http://www.51xit.top
浏览器输入http://www.51xit.top/upload/bbs/1.php ,页面显示http://www.51xit.top
浏览器输入http://www.51xit.top/upload/index.html ,页面不跳转

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值