文章目录

  • 说明
  • 一、网址更换新域名后,旧的访问跳转到新的域名上。
  • 二·、基于客户端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;
        }
    }

Nginx 自动跳转到80 nginx跳转页面_Nginx 自动跳转到80


Nginx 自动跳转到80 nginx跳转页面_nginx_02

  • 使用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

重新查看

Nginx 自动跳转到80 nginx跳转页面_nginx_03

四、基于参数匹配的跳转

在适当的位置添加:

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;
}

如图所示:

Nginx 自动跳转到80 nginx跳转页面_html_04

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

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

效果验证:

Nginx 自动跳转到80 nginx跳转页面_nginx_05


Reference:location和rewrite的配合使用例子