当前位置: 首页 > news >正文

Nginx-Rewrite

1、Rewrite的定义

rewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在 server { }, location { }, if { }中,并且只能对域名后边的除去传递的参数外的字符串起作用。 例如location 只能对域名后边的除去传递的参数外的字符串起作用,例如http ://www. kgc.com/index.ph p?id= 1 只对/i ndex. php 重写。如果想对域名或参数字符串起作用, 可以使用if 全局变星匹配, 也可以使用proxy_pass反向代理。

1.1:rewrite跳转场景

  • 可以调整用户浏览的URL , 看起来更规范, 合乎开发及产品人员的需求。
  • 为了让搜索引擎搜录网站内容及用户体验更好, 企业会将动态URL 地址伪装成静态地址提供服务。
  • 网址换新域名后, 让旧的访问跳转到新的域名上。例如, 访问京东的360buy. com 会跳转到jd .com 。
  • 根据特殊变簸、目录、客户端的信息进行URL 调整等。

1.2:rewrite跳转实现

Nginx 是通过ngx_http_rewrite_module 模块支持url 重写、支持if 条件判断, 但不支持else 。另外该模块需要PCRE 支持,应在编译N ginx 时指定PCRE 支持,默认已经安装。
根据相关变量重定向和选择不同的配置, 从一个location 跳转到另一个location , 不过这样的循环最多可以执行10 次, 超过后Nginx 将返回500 错误。同时, 重写模块包含set 指令,来创建新的变量并设其值, 这在有些情景下非常有用的, 如记录条件标识、传递参数到其他location 、记录做了什么等等。rewrite 功能就是使用Nginx 提供的全局变量或自己设置的变量, 结合正则表达式和标志位实现url 重写以及重定向。

1.3: Nginx 正则表达式

常用的正则表达式元字符
常用的正则表达式元字符

2:Nginx Rewrite 基本操作

2.1:Rewrite 语法

Rewrite 命令的语法如下所示,其中regex 表示正则匹配规则、rep lacement 表示跳转后的内容、flag 表示rewrite 支持的flag 标记。

rewrite< regex>< replacement> [flag];

flag 标记说明:

  • last: 相当千Apache 的[L]标记, 表示完成rewrite 。
  • break: 本条规则匹配完成即终止, 不再匹配后面的任何规则。
  • redirect: 返回302 临时重定向, 浏览器地址会显示跳转后的URL 地址, 爬虫不会更新url(因为是临时) 。
  • permanent: 返回301 永久重定向, 浏览器地址栏会显示跳转后的URL 地址, 爬虫更新url 。

last 和break 区别是: last 一般写在server 和if 中, 而break 一般使用在location 中。last 不终止重写后的urI 匹配, 即新的url 会再从server走一遍匹配流程, 而break 终止重写后的匹配。 

2.2:Location 分类

location 大致可以分为三类, 语法如下:

location = patt{}[精准匹配]
location patt{}[一般匹配]
location~ patt {}[正则匹配]

  •  ~ : 表示执行一个正则匹配, 区分大小写。
  • ~*: 表示执行一个正则匹配, 不区分大小写。
  • !~: 表示执行一个正则匹配, 区分大小写不匹配。
  •  !~* : 表示执行一个正则匹配, 不区分大小写不匹配。
  • ^~: 表示普通字符匹配。使用前缀匹配。如果匹配成功, 则不再匹配其他location 。
  • = : 进行普通字符精确匹配, 也就是完全匹配。
  • @ : 它定义一个命名的location , 使用在内部定向时, 例如error_page, try_files 。

 2.3:Location 优先级

在Nginx 的location 配置中location 的顺序没有太大关系。匹配优先级和location 表达式的类型有关: 相同类型的表达式,字符串长的会优先匹配。

  • 等号类型( = ) 的优先级最高。一旦匹配成功, 则不再查找其他匹配项。
  • ^~类型表达式。一旦匹配成功, 则不再查找其他匹配项。
  • 正则表达式类型( ~和~* )的优先级次之。
  • 常规字符串匹配类型。按前缀匹配。
  • 通用匹配( /) ' 如果没有其它匹配, 任何请求都会匹配到。

从功能看rewrite 和location 似乎有点像, 都能实现跳转,主要区别在千rewrite 是在同一域名内更改获取资源的路径, 而location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。很多情况下rewrite 也会写在location 里, 它们的执行顺序如下:

(1) 执行server 块里面的rewrite 指令。
(2) 执行location 匹配。
(3) 执行选定的location 中的rewrite 指令。

相关文章:

Nginx-Rewrite

1、Rewrite的定义 rewrite功能就是使用nginx提供的全局变量或自己设置的变量&#xff0c;结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在 server { }, location { }, if { }中&#xff0c;并且只能对域名后边的除去传递的参数外的字符串起作用。 例如location…...

2024 年 Python 基于 Kimi 智能助手 Moonshot Ai 模型搭建微信机器人(更新中)

注册 Kimi 开放平台 Kimi&#xff1a;https://www.moonshot.cn/ Kimi智能助手是北京月之暗面科技有限公司&#xff08;Moonshot AI&#xff09;于2023年10月9日推出的一款人工智能助手&#xff0c;主要为用户提供高效、便捷的信息服务。它具备多项强大功能&#xff0c;包括多…...

关于接口多态,何时使用接口名创建对象?何时使用子类创建对象?

接口创建对象只能创建他的实现类&#xff0c;所以会出现两种创建方式&#xff1a; 1、接口 对象名 new 类名 2、子类对象 对象名 new 类名 举个例子&#xff0c;swimming是一个接口&#xff0c;flog是他的一个实现类&#xff0c;重写了swimming的eat()方法 子类对象 对象名…...

短视频热恋进行时:成都柏煜文化传媒有限公司

短视频热恋进行时&#xff1a;情感与创意的碰撞与融合 在数字时代的浪潮中&#xff0c;短视频以其独特的魅力&#xff0c;成为了当代人表达情感、分享生活的新宠。它如同一个浓缩的时空胶囊&#xff0c;将那些瞬间的美好、感人的故事、创意的火花&#xff0c;封装在短短几十秒…...

springBoot多数据源使用、配置

又参加了一个新的项目&#xff0c;虽然是去年做的项目&#xff0c;拿来复用改造&#xff0c;但是也学到了很多。这个项目会用到其他项目的数据&#xff0c;如果调用他们的接口取数据&#xff0c;我还是觉得太麻烦了。打算直接配置多数据源。 然后去另一个数据库系统中取出数据…...

打破安全设备孤岛,多源威胁检测与响应(XDR)如何构建一体化安全防线

在数字化和信息化迅猛发展的当下&#xff0c;安全设备孤岛现象成为网络安全治理中的一大挑战。在多元化的市场环境中&#xff0c;不同厂商的安全设备因数据格式与系统兼容性的差异&#xff0c;导致信息流通受阻、共享困难&#xff0c;形成孤立的安全防线。 安全设备孤岛现象不仅…...

Android SurfaceFlinger——概述(一)

一、基础介绍 SurfaceFlinger 是 Android 系统中的一个关键组件&#xff0c;负责管理屏幕显示的合成和渲染。 服务角色&#xff1a;SurfaceFlinger 作为一个系统服务独立运行&#xff0c;它不依赖于任何应用程序进程&#xff0c;而是由系统启动并持续运行。窗口管理&#xff1a…...

工业 web4.0,UI 风格令人赞叹

工业 web4.0&#xff0c;UI 风格令人赞叹...

HarmonyOS 角落里的知识 —— 状态管理

一、前言 在探索 HarmonyOS 的过程中&#xff0c;我们发现了许多有趣且实用的功能和特性。有些总是在不经意间或者触类旁通的找到。或者是某些开发痛点。其中&#xff0c;状态管理是ArkUI开发非常核心的一个东西&#xff0c;我们进行了大量的使用和测试遇到了许多奇奇怪怪的问…...

TDengine数据迁移

前言 taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。 taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份&#xff0c;也可以对数据库、超级 表和普通表中指定时间段内的数据记录…...

使用ZIP包安装MySQL及配置教程

在本教程中&#xff0c;我们将指导您完成使用ZIP包安装MySQL的过程&#xff0c;并对配置文件进行必要的修改&#xff0c;以及解决可能遇到的问题。本示例以MySQL 5.7.44为例&#xff0c;但步骤同样适用于其他版本如MySQL 8.3.0等。请根据实际需要选择适合的版本下载&#xff1a…...

Java基础入门day64

day64 web项目 数据库设计 在小米商城主页&#xff0c;主要的内容是多种商品类型的展示&#xff0c;分别有手机&#xff0c;智能穿戴&#xff0c;笔记本平板&#xff0c;家电&#xff0c;生活电器&#xff0c;厨房电器&#xff0c;智能家具等大的七个分类&#xff0c;根据这个…...

高德地图轨迹回放/轨迹播放

前言 本篇文章主要介绍高德地图的轨迹回放或播放的实现过程&#xff0c;是基于vue2实现的功能&#xff0c;同时做一些改动也是能够适配vue3的。其中播放条是用的是element UI中的el-slider组件&#xff0c;包括使用到的图标也是element UI自带的。可以实现轨迹的播放、暂停、停…...

像素、像素密度、位图和矢量图

像素、像素密度、位图和矢量图 像素 -- 图像元素pt分辨率ppidpi 点阵图 - bitmap常见的类型 矢量图点阵图 vs 矢量图参考小结 像素、矢量图等概念在前端开发中经常遇到&#xff0c;这里做一个简单的梳理。 像素 – 图像元素 做前端开发的经常遇到它。像素是图像的最小单位&am…...

第二证券股市资讯:昨夜!全球新“股王”诞生

昨晚&#xff0c;英伟达成全球市值榜首公司。 当地时间6月18日&#xff0c;美股三大指数小幅收高&#xff0c;标普500指数与纳指再创前史新高。标普500指数涨0.25%&#xff0c;道指涨0.15%&#xff0c;纳指涨0.03%。 AI热潮推动英伟达大涨&#xff0c;市值逾越微软、苹果&…...

自动水位雨量站:用于水库防汛预警

TH-SW2自动水位雨量站是一种现代化的监测设备&#xff0c;主要用于水库等水域的防汛预警系统。它通过集成水位和雨量监测功能&#xff0c;为水库的管理和调度提供实时、准确的数据支持。 工作原理&#xff1a; 自动水位雨量站通过内置的水位计和雨量计实时监测水库的水位变化和…...

苍穹外卖---新增员工(P16-P20)

一、需求分析和设计 &#xff08;1&#xff09;产品原型 一般在做需求分析时&#xff0c;往往都是对照着产品原型进行分析&#xff0c;因为产品原型比较直观&#xff0c;便于我们理解业务。后台系统中可以管理员工信息&#xff0c;通过新增员工来添加后台系统用户。 新增员工…...

Windows10 利用QT搭建SOEM开发环境

文章目录 一. SOEM库简介二. 安装WinPcap三. SOEM(1.4)库安装(1) 编译32位库(2) 编译64位库 四. 运行SOEM示例代码五. WIN10下利用QT构建SOEM开发环境 一. SOEM库简介 SOEM&#xff08;Scalable Open EtherCAT Master 或 Simple Open EtherCAT Master&#xff09;是一个开源的…...

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件二(补充)

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件二&#xff08;补充&#xff09; 如果你想在cmd命令窗口内看到程序运行&#xff0c;即点开弹出运行窗口&#xff0c;关闭时exe自动关闭。 需要再launch4j上进行如下操作&#xff1a; 这样转换好的exe就可以有控制台了…...

【kyuubi k8s】kyuubi发布k8s执行spark sql

背景 依据上一篇kyuubi与spark集成&#xff0c;并发布spark sql到k8s集群&#xff0c;上一篇的将kyuubi和spark环境放在本地某台服务器上的&#xff0c;为了高可用&#xff0c;本篇将其打包镜像&#xff0c;并发布到k8s。 其实就是将本地的kyuubi&#xff0c;spark&#xff0…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...