我是靠谱客的博主 受伤饼干,最近开发中收集的这篇文章主要介绍Nginx Rewrite的六大跳转场景说明一、网址更换新域名后,旧的访问跳转到新的域名上。二·、基于客户端IP访问跳转三、新域名跳转添加目录四、基于参数匹配的跳转五、基于目录下所有php文件进行跳转六、基于一个具体的url页面进行跳转,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 说明
  • 一、网址更换新域名后,旧的访问跳转到新的域名上。
  • 二·、基于客户端IP访问跳转
  • 三、新域名跳转添加目录
  • 四、基于参数匹配的跳转
  • 五、基于目录下所有php文件进行跳转
  • 六、基于一个具体的url页面进行跳转

说明

  • 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的配合使用例子

最后

以上就是受伤饼干为你收集整理的Nginx Rewrite的六大跳转场景说明一、网址更换新域名后,旧的访问跳转到新的域名上。二·、基于客户端IP访问跳转三、新域名跳转添加目录四、基于参数匹配的跳转五、基于目录下所有php文件进行跳转六、基于一个具体的url页面进行跳转的全部内容,希望文章能够帮你解决Nginx Rewrite的六大跳转场景说明一、网址更换新域名后,旧的访问跳转到新的域名上。二·、基于客户端IP访问跳转三、新域名跳转添加目录四、基于参数匹配的跳转五、基于目录下所有php文件进行跳转六、基于一个具体的url页面进行跳转所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部