Nginx Rewrite的六大跳转场景

说明

  • rewrite语法格式及参数语法如下:
    rewrite    <regex>    <replacement>    [flag];

    关键字      正则        替代内容          flag标记
   关键字:其中关键字error_log不能改变

   正则:perl兼容正则表达式语句进行规则匹配

   替代内容:将正则匹配的内容替换成replacement

   flag标记:rewrite支持的flag标记

  • flag标记说明:
last  #本条规则匹配完成后,继续向下匹配新的location URI规则

break  #本条规则匹配完成即终止,不再匹配后面的任何规则

redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

Rewrite跳转场景:

一、网址更换新域名后,旧的访问跳转到新的域名上。

  1. 修改默认站点的配置文件。
vim /etc/nginx      //已做链接
server {
  server_name www.aa.com;
  ...
  添加
  if ($host = 'www.bb.com') {
    rewrite ^/(.*)$ http://www.aa.com/$1 permanent;
  }
  1. 添加新域名www.bb.com的站点位置,
listen  80;
        server_name www.aa.com;
        charset utf8;
        access_log logs/aa.access.log main;

        location / {
          root /var/www/html/aa.com;
          index  index.html index.htm;
        }
        error_page 500 502 503 504/50x.html;
        location = 50x.html{
          root html;
        }
  1. 重启nginx
systemctl restart nginx
  1. 浏览器验证
    在这里插入图片描述
    在这里插入图片描述

二·、基于客户端IP访问跳转

  • 公司业务版本上线,所有IP访问任何内容都显示一个固定的维护页面,只有公司可以正常访问。
  1. 修改nginx配置文件
vim /etc/nginx.conf
set $rewrite true;
if ($remote_addr = "20.0.0.13") {
  set $rewrite false;
}
if ($rewrite = true) {
  rewrite (.+) /maintenance.html;
}
location = /maintenance.html {
  root /usr/local/nginx/html;
}
  1. 编辑重定向网页
vim /usr/local/nginx/html/maintenance.html
    Website is Maintaining,Please visit later.
  1. 重启nginx
systemctl restart nginx

4.验证

  • 20.0.0.13主机验证
    在这里插入图片描述
  • 20.0.0.10 主机验证
    在这里插入图片描述

三、新域名跳转添加目录

  • 与场景一类似
    实现浏览器访问 bbs.bb.com/post/index.html 跳转到 www.aa.com/bbs/post/index.html
 server {
        listen       80;
        server_name  bbs.bb.com;
        charset utf8;
        access_log logs/bb.com.access.log main;
        location /post {
          rewrite (.+) http://www.aa.com/bbs$1 permanent;
        }
}
server {
        listen  80;
        server_name www.aa.com;
        charset utf8;
        access_log logs/aa.access.log main;
        location / {
          root /var/www/html/aa.com;
          index  index.html index.htm;
        }
        error_page 500 502 503 504/50x.html;
        location = 50x.html{
          root html;
        }
    }

在这里插入图片描述
在这里插入图片描述

  • 使用fiddler4抓包,发现实现了rewrite到www.aa.com/bbs/post/index.html 但我们aa.com下没有这个目录文件,所以出现了404 Not Found。
    现在编辑
cd /var/www/html/aa.com
mkdir -p bbs/post/
vim bbs/post/index.html

重新查看
在这里插入图片描述

四、基于参数匹配的跳转

在适当的位置添加:

if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
          rewrite (.*) http://www.aa.com permanent;
  • 当访问www.bb.com/100-200-3.html时,跳转到www.aa.com,如下图所示
    在这里插入图片描述
  • 当访问www.bb.com/100-150-5时,不符合rewrite条件,不能跳转到www.aa.com
    在这里插入图片描述

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

  • 访问www.bb.com/upload/gg.php 跳转到 www.aa.com首页
    适当位置添加:
location ~* /upload/.*\.php$ {
  rewrite (.+) http://www.aa.com permanent;
}

如图所示:
在这里插入图片描述

六、基于一个具体的url页面进行跳转

  • 如访问http://www.bb.com/test/bb.html 跳转到www.aa.com
    可在合适位置添加:
location ~* ^/test/bb.html {
  rewrite (.+) http://www.aa.com permanent;
}

效果验证:
在这里插入图片描述
Reference:location和rewrite的配合使用例子

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值