nginx里的rewrite跳转的实现


Posted in Servers onMarch 31, 2021

一. 新旧域名跳转

作用场景:基于域名的跳转,现在公司旧域名:www.peihua.com

有业务需求要变更,需要使用新域名www.zhenguo.com代替,但是旧域名不能废除。需要跳转到新域名上,而且后面的参数保持不变

配置dns,分别配置www.peihua.com(old)和www.zhenguo.com(new)解析

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

(必须要有官方源才能yum安装nginx)

yum install nginx -y
rpm -qc nginx    //查找配置文件

修改nginx的配置文件

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf 

server {
  listen    80;
  server_name www.peihua.com;                            #域名修改

#charset koi8-r;
  access_log /var/log/nginx/peihua.com-access.log main;        #日志修改

location / {
    #域名重定向
    if ($host = 'www.peihua.com') {
 rewrite ^/(.*)$ http://www.zhenguo.com/$1 permanent;
    }
    root  /usr/share/nginx/html;
    index index.html index.htm;
  }

[root@localhost named]# systemctl restart nginx

配置域名解析

yum -y install bind

#修改主配置文件
[root@localhost conf.d]# vim /etc/named.conf
options {
    listen-on port 53 { any; };      //修改成any
    listen-on-v6 port 53 { ::1; };
    directory    "/var/named";
    dump-file    "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    recursing-file "/var/named/data/named.recursing";
    secroots-file  "/var/named/data/named.secroots";
    allow-query   { any; };       //修改成any

#修改区域配置文件
[root@localhost conf.d]# vim /etc/named.rfc1912.zones 
zone "peihua.com" IN {
    type master;
    file "peihua.com.zone";
    allow-update { none; };
};

zone "zhenguo.com" IN {
    type master;
    file "zhenguo.com.zone";
    allow-update { none; };
};

#修改区域数据文件
[root@localhost conf.d]# cd /var/named/
[root@localhost named]# cp -p named.localhost peihua.com.zone
[root@localhost named]# cp -p peihua.com.zone zhenguo.com.zone

[root@localhost named]# systemctl start named

浏览器测试

浏览器输入模拟访问 http://www.peihua.com/test/1/index.php(虽然这个请求内容) 是不存在的)跳转到
http://www.zhneguo.com/test/1/index.php,从headers 里面 可以看到301,实现了永久跳转,而且域名后的参数也正常跳转。

二. 基于IP访问跳转

作用场景:基于客户端IP访问跳转,例如今天公司业务版本上线,所有IP 访问任何内容都显示一个固定维护页面,只有公司IP:12.0.0.100访问正常

修改nginx配置文件

[root@localhost html]# vim /etc/nginx/conf.d/default.conf 

server {
  listen    80;
  server_name www.peihua.com;

 #charset koi8-r;
  charset 'utf-8';                                      //识别中文字符
  access_log /var/log/nginx/peihua.com-access.log main;
  #设置是否合法的IP标志
  set $rewrite ture;
  #判断是否为合法IP
  if ($remote_addr = "12.0.0.100") {
 set $rewrite false;
 }
 #非法IP进行判断打上标记
 if ($rewrite = ture) {
 rewrite (.+) /maintenance.html;
 }
 #匹配标记进行跳转站点
 location = /maintenance.html {
 root /usr/share/nginx/html;
 }

给maintenance.html添加自定义页面内容

[root@localhost html]# cat /usr/share/nginx/html/maintenance.html 
<h1>网站正在维护</h1>

浏览器测试

使用ip地址为12.0.0.100 进行访问http://www.peihua.com,可以正常访问
使用IP地址为12.0.0.99进行访问http://www.peihua.com,显示维护页面

三. 基于旧域名跳转到新域名后面加目录

作用场景:基于旧域名跳转到新域名后面加目录,例如现在访问的是http://bbs.peihua.com.
现在需要将这个域名下面的发帖都跳转到http://www.peihua.com/bbs,注意保持域名跳转后 的参数不变

修改nginx配置文件

[root@localhost named]# vim /etc/nginx/conf.d/default.conf 

  listen    80;
  server_name bbs.peihua.com;
  #charset koi8-r;
  charset 'utf-8';
  access_log /var/log/nginx/peihua.com-access.log main;
  location /post {
       rewrite (.+) http://www.peihua.com/bbs$1 permanent;
  }

注意:accp.com.zone 需要更改主机域名解析,把www改成 bbs

[root@localhost named]# cd /var/named
[root@localhost named]# vim peihua.com.zone 
$TTL 1D
@    IN SOA @ rname.invalid. (
                    0    ; serial
                    1D   ; refresh
                    1H   ; retry
                    1W   ; expire
                    3H )  ; minimum
    NS   @
    A    127.0.0.1
bbs IN A    12.0.0.25

[root@localhost named]# systemctl restart named
[root@localhost named]# systemctl restart nginx

浏览器访问

浏览器访问 http://bbs.peihua.com/post/a.html,被跳转称为www.peihua.com/bbs/post/a.txt

四. 基于参数匹配的跳转

作用场景:基于参数匹配的跳转,例如现在访问 http://www.peihua.com/100-(100 | 200)-100.html
跳转到http://www.peihua.com页面

修改nginx配置文件

[root@localhost named]# vim /etc/nginx/conf.d/default.conf 

server {
  listen    80;
  server_name www.peihua.com;
  
  #charset koi8-r;
  charset 'utf-8';
  access_log /var/log/nginx/peihua.com-access.log main;
  
  if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
     rewrite (.*) http://www.peihua.com permanent;
  }

注意:\d匹配一个数字,0~9之间

修改会dns,把bbs改成www

[root@localhost named]# vim peihua.com.zone 
$TTL 1D
@    IN SOA @ rname.invalid. (
                    0    ; serial
                    1D   ; refresh
                    1H   ; retry
                    1W   ; expire
                    3H )  ; minimum
    NS   @
    A    127.0.0.1
www IN A    12.0.0.25

[root@localhost named]# systemctl restart named
[root@localhost named]# systemctl restart nginx

浏览器测试

浏览器访问 http://www.peihua.com/100-200-26.html,被跳转称为 www.peihua.com首页

五. 基于所有以php结尾及基于某一个页面的跳转

修改nginx配置文件

[root@localhost named]# vim /etc/nginx/conf.d/default.conf 

server {
  listen    80;
  
  server_name www.peihua.com;
  #charset koi8-r;
  charset 'utf-8';
  access_log /var/log/nginx/peihua.com-access.log main;
  location ~* /upload/.*\.php$ {
    rewrite (.+) http://www.peihua.com permanent;
  }


[root@localhost named]# systemctl restart nginx

浏览器访问

浏览器访问 http://www.peihua.com/upload/a.php,被跳转称为 www.peihua.com

六. 基于具体的某一个页面进行跳转/abc/123.html

修改nginx配置文件

[root@localhost named]# vim /etc/nginx/conf.d/default.conf 

server {
  listen    80;
  server_name www.peihua.com;

  #charset koi8-r;
  charset 'utf-8';
  access_log /var/log/nginx/peihua.com-access.log main;

  location ~* ^/abc/123.html {
    rewrite (.+) http://www.peihua.com permanent;
  }
  
[root@localhost named]# systemctl restart nginx

浏览器访问

浏览器访问 http://www.peihua.com/abc/123.html,被跳转称为 www.peihua.com

到此这篇关于nginx里的rewrite跳转的实现的文章就介绍到这了,更多相关nginx rewrite跳转内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Nginx如何配置Http、Https、WS、WSS的方法步骤
May 11 Servers
Nginx反向代理至go-fastdfs案例讲解
Aug 02 Servers
nginx刷新页面出现404解决方案(亲测有效)
Mar 18 Servers
使用Docker容器部署rocketmq单机的全过程
Apr 03 Servers
Nginx动静分离配置实现与说明
Apr 07 Servers
nginx容器方式反向代理实战
Apr 18 Servers
搭建Yolov5服务器
Apr 30 Servers
tomcat下部署jenkins的方法
May 06 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
在虚拟机中安装windows server 2008的图文教程
Jun 28 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
Jul 15 Servers
ubuntu20.04虚拟机无法上网的问题及解决
Dec 24 Servers
nginx基于域名,端口,不同IP的虚拟主机设置的实现
Mar 31 #Servers
Nginx设置日志打印post请求参数的方法
Mar 31 #Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
nginx简单配置多个server的方法
nginx proxy_cache 缓存配置详解
Nginx搭建rtmp直播服务器实现代码
Mar 31 #Servers
nginx 反向代理之 proxy_pass的实现
Mar 31 #Servers
You might like
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
js实现关闭网页出现是否离开提示
2017/12/07 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Python3标准库总结
2019/02/19 Python
pytorch中的卷积和池化计算方式详解
2020/01/03 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
捷科时代的软件测试笔试题
2015/11/09 面试题
工作表现自我评价
2014/02/08 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
中学生演讲稿
2014/04/26 职场文书
2015年幼师工作总结
2015/04/28 职场文书
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers