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简单配置多个server的方法
Mar 31 Servers
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
配置Kubernetes外网访问集群
Mar 31 Servers
Vertica集成Apache Hudi重磅使用指南
Mar 31 Servers
Windows server 2012 配置Telnet以及用法详解
Apr 28 Servers
Nginx配置之禁止指定IP访问
May 02 Servers
在容器中使用nginx搭建上传下载服务器
May 11 Servers
nginx设置资源请求目录的方式详解
May 30 Servers
GPU服务器的多用户配置方法
Jul 07 Servers
win10搭建配置ftp服务器的方法
Aug 05 Servers
Apache SkyWalking 监控 MySQL Server 实战解析
Sep 23 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 $_ENV为空的原因分析
2009/06/01 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
学习JavaScript设计模式(接口)
2015/11/26 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
Python fileinput模块使用介绍
2014/11/30 Python
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
Python遍历pandas数据方法总结
2018/02/09 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
jupyter notebook 多行输出实例
2020/04/09 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
写给保洁员表扬信
2014/01/08 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
承诺书范文
2014/06/03 职场文书
干部对照检查材料范文
2014/08/26 职场文书
2015新学期开学寄语
2015/02/26 职场文书
检讨书怎么写?
2019/06/21 职场文书
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis