nginx的重定向

news2025/2/24 8:42:07

nginx重定向--rewrite重写功能介绍

rewrite 的功能介绍 


rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,
例如 http://www.yang.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写。

 

rewrite执行顺序

1.先执行server块的rewrite

2.执行location里面定义的rewrite

3.选定location中的rewrite

语法格式:rewrite <regex> <replacement> [flag]

<regex> 正则表达式

<replacement> :跳转内容或者路径

[flag]:标志位  “标记”

flag:表示支持rewrite的flag标记

last:本条规则匹配完成后,继续向下匹配新的location URI规则

rewrite zzr zzz last;

 ###flag标记说明###


last :本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中。
break :本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中。
redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

 

rewrite使用案例-------1.基于域名的跳转

需求:www.kfc.com 公司业务变更,全部迁移到新的域名 www.benet.com代替,但是旧域名不能被废除,访问kfc可以跳转到benet,且匹配的uri不变。

vim /nginx.conf

 server {
        listen       80;
        server_name  www.kfc.com;  
        charset utf-8;
location / {
        if ($host = 'www.kfc.com') {
#$host为rewrite全局变量,代表请求主机头字段或主机名
            rewrtie ^/(.*)$ http://www.benet.com/$1 permanent; 
"/" 后面所有的内容转换为  http://www.benet.com/$1 permanent;
     }
       root html;
       index index.html inde.htm
}

访问域名一定要地址解析!!!!!!!!

echo '20.0.0.10 www.kfc.com www.bentet.com' >> /etc/hosts

给页面编写内容

此时访问 www.kfc.com 会自动跳转到 www.benet.com

rewrite使用案例-------2.基于ip的跳转

公司业务新版本上线,用户访问网站同意显示在维护中,只有一个IP可以访问测试

vim /nginx.conf

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

        charset utf-8;    
#页面内容支持中文

        set $rewrite true;   
#设置标记是否合法
        if ( $remote_addr = "20.0.0.10") {
#定义客户端的访问地址
        set $rewrite false;
#如果是20.0.0.10,则不重写(rewrite)
}
        if ( $rewrite = true ) {
        rewrite (.+) /error.html redirect
#如果不是20.0.0.10,则重写
#除了 20.0.0.10,其余都跳转error界面
}

        location / {
         if ($host = 'www.kfc.com') {
         rewrite ^/(.*)$ http://www.benet.com/$1 permanent;
}
         root html;
         index index.html index.htm;
}

进入error.html 编写内容

此时我们用另一台(20.0.0.20来访问)虚拟机测试

error,无法连接

rewrite使用案例-------3. 基于目录下的PHP访问,通过PHP跳转新页面

vim nginx.conf

server {
   listen 80;
   server_name www.kfc.com;
   charset utf-8;

   location ~* /upload/.*\.php$ {
锁定 /upload以后的所有内容
    rewrite (.+) http://www.test.com permanent;
重写位  test.com
  }
   location / {
    root html;
    index index.html index.htm;
  }
}

访问域名,一定要做域名解析!!!!

配置页面内容

访问内容正确

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytest中fixture的使用方法

一、pytest中的fixture是什么 为可靠的和可重复执行的测试提供固定的基线&#xff08;可以理解为测试的固定配置&#xff0c;使不同范围的测试都能够获得统一的配置&#xff09;&#xff0c;fixture提供了区别于传统单元测试&#xff08;setup/teardown&#xff09;风格的令人…

来自云仓酒庄品牌雷盛红酒分享为什么高海拔的酒价格更高?

为高海拔地区的葡萄园提供资源的成本也是一个需要考虑的关键因素&#xff0c;并且肯定会影响最终葡萄酒的价格。来自云仓酒庄品牌雷盛红酒分享虽然融雪在没有降雨的月份为自然灌溉系统提供水&#xff0c;但在世界上许多受保护的优质葡萄园地区&#xff0c;灌溉葡萄树通常是不允…

【Spring源码分析】Bean的元数据和一些Spring的工具

Bean的元数据和一些Spring工具 一、BeanDefinition1、认识 BeanDifinition2、AbstractBeanDefinition3、GenericBeanDefinition测试 二、BeanDefinition 注册器三、加载BeanDefinition四、包扫描过程分析包扫描过程总结 五、内省 API六、反射工具Bean 的创建批量构造Resolvable…

怎样理解伦敦金交易的点差

不管大家做的是什么投资品种&#xff0c;只要过程中有中间商提供了一定的服务&#xff0c;那么就需要支付一定的费用&#xff0c;这也是十分合理的事情。在伦敦金的市场上&#xff0c;交易平台主要通过点差的形式&#xff0c;向客户征收一定的投资服务费用。 伦敦金买卖过程中的…

.net wpf程序 移花接木

最近在研究C# .net桌面程序。非常有趣 软件是国外作者写的 公司要求修改翻译 从最初的开源变成闭源再到加壳. 一路让我这个小小的职员好蛋疼. 软件是VS2015 C# WPF 程序 在不脱壳的情况下 实现挂钩类托管函数 遍历WPF控件汉化 首先通过各种手段脱壳目标程序&#xff0c;哪怕是不…

搭建 Hadoop 生态集群大数据监控告警平台

目录 一、部署 prometheus 环境 1.1 下载安装包 1.2 解压安装 1.3 修改配置文件 1.3.1 hadoop-env.sh 1.3.2 prometheus_config.yml 1.3.3 zkServer.sh 1.3.4 prometheus_zookeeper.yaml 1.3.5 alertmanager.yml 1.3.6 prometheus.yml 1.3.7 config.yml 1.3.8 t…

群峰系统是什么,群峰系统源码,群峰系统2.0

群峰体系是什么&#xff1f;它与第三方的团购软件有何不同&#xff1f; 近来有不少做生活团购服务商&#xff0c;餐饮商家&#xff0c;团购合作伙伴的朋友&#xff0c;时常听到群丰体系&#xff0c;了解到这是一个官方平台。其实&#xff0c;群峰系统已经成为了群峰的一大助力&…

鲲山科技:引入和鲸 ModelWhale,实现量化策略的高效迭代

量化投资是数据科学在金融行业的应用。 2023 年&#xff0c;量化行业的超额收益开始收敛&#xff0c;量化私募如何形成自身核心竞争力&#xff1f; 和鲸拜访客户鲲山科技&#xff08;深圳&#xff09;&#xff0c;揭示其“弯道超车”的独家秘诀。 群体作战 年初至今&#xff…

【备忘录】小技巧,使用IDEA的模板功能快速开发新项目

很多时候我们为了测试某个功能&#xff0c;经常需要创建新的项目&#xff0c;使用spring.io或者阿里的start创建很方便&#xff0c;但是步骤还是相对繁琐的&#xff0c;IDEA提供了一个非常好用且强大的模板功能&#xff0c;让我们能快速创建项目 一、项目模板操作 IDEA版本202…

flutter 开发中的问题与技巧

一、概述 刚开始上手 flutter 开发的时候&#xff0c;总会遇到这样那样的小问题&#xff0c;而官方文档又没有明确说明不能这样使用&#xff0c;本文总结了一些开发中经常会遇到的一些问题和一些开发小技巧。 二、常见问题 1、Expanded 组件只能在 Row、Column、Flex 中使用 C…

修改http_charfinder.py使能在python311环境中运行

需要修改两个函数&#xff0c;第一个是init函数&#xff0c;修改如下&#xff1a; async def init(loop, address, port): # <1> # app web.Application(looploop) # <2> # app.router.add_route(GET, /, home) # <3> app web.Application(…

AVPro Movie Capture☀️三、Unity录屏:录制摄像机指定区域

文章目录 🟥 录屏效果展示🟨 插件使用方法1️⃣ 导入插件2️⃣ 测试3️⃣ 移植到你的项目🟥 录屏效果展示 本插件是博主基于 “AVPro Movie Capture” 自制插件,该插件实现了: 录制摄像机指定区域画面的功能只有开始录制和停止录制两个API,简单不复杂其余功能完全基于…

【交付高质量,用户高增长】-用户增长质量保证方法论 | 京东云技术团队

前言 俗话说&#xff0c;“测试是质量的守护者”&#xff0c;但单凭测试本身却远远不够。大多数情况下&#xff0c;测试像“一面镜子”&#xff0c;照出系统的面貌&#xff0c;给开发者提供修改代码的依据&#xff0c;这个“照镜子”的过程&#xff0c;就是质量评估的过程&…

架构案例2017(五十二)

第5题 阅读以下关于Web系统架构设计的叙述&#xff0c;在答题纸上回答问题1至问题3.【说明】某电子商务企业因发展良好&#xff0c;客户量逐步增大&#xff0c;企业业务不断扩充&#xff0c;导致其原有的B2C商品交易平台己不能满足现有业务需求。因此&#xff0c;该企业委托某…

Bootstrap-媒体类型

加上媒体查询之后&#xff0c;只有在特定的设备之下才能起作用&#xff01;&#xff01;&#xff01;

【JWT】解密JWT:让您的Web应用程序更安全、更高效的神秘令牌

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于JWTElementUI的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.JWT是什么 JWT工作原理 JWT验证…

使用 flex 弹性盒保持容器均分布局

使用 flex 弹性盒保持容器均分布局 css 代码 .container {display: flex;width: 100%;height: 100vh; }.part {flex-grow: 1; /* 设置这个值就可以实现均匀分布&#xff0c;但是里面有内容会自动撑开 */flex-basis: 0; /* 为了防止自动撑开&#xff0c;设置基础值为 0 */ }如…

日常中msvcr120.dll丢失怎样修复?总结5个msvcr120.dll丢失的修复教程

在我日常的计算机维护工作中&#xff0c;经常遇到一些用户报告他们在运行某些程序时遇到了“MSVCR120.dll丢失”的问题。这是一个常见的DLL文件丢失或损坏问题&#xff0c;可能会对用户的计算机操作造成不便。在这篇心得体会中&#xff0c;我将分享一些关于这个问题的场景以及如…

JS截取url上面的参数

手动截取封装 function getUrlParams(url location.href) {let urlStr url.split(?)[1] || let obj {};let paramsArr urlStr.split(&)for (let i 0, len paramsArr.length; i < len; i) {const num paramsArr[i].indexOf()let arr [paramsArr[i].substring(0,…

vue监听watch或mutations

/mutations vue监听watch watch监听的属性的方法可以有两个值&#xff0c;一个新值&#xff0c;一个旧值 方法1: watch:{myVlaue:function(val,oldVal){}}方法2: //深度监听 watch:{pageSizeSel:{deep:true,handler:function () {this.pageCode1;this.getData();}},}当姓或…