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访问日志及错误日志参数说明
Mar 31 Servers
解决xampp安装后Apache无法启动
Mar 21 Servers
Nginx工作模式及代理配置的使用细节
Mar 21 Servers
Kubernetes部署实例并配置Deployment、网络映射、副本集
Apr 01 Servers
Mac电脑OS系统下安装Nginx的详细教程
Apr 14 Servers
Windows Server 2008 修改远程登录端口以及配置防火墙
Apr 28 Servers
Windows server 2012搭建FTP服务器
Apr 29 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
阿里云服务器部署RabbitMQ集群的详细教程
Jun 01 Servers
win server2012 r2服务器共享文件夹如何设置
Jun 21 Servers
git stash(储藏)的用法总结
Jun 25 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
jQuery JSON的解析方式分享
2011/04/05 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
Python判断字符串与大小写转换
2015/06/08 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
python中的django是做什么的
2020/07/31 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
副总经理工作职责
2013/11/28 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
跳高加油稿
2015/07/21 职场文书
中秋节感想
2015/08/10 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS