Nginx的Location和Rewrite

news2024/11/17 12:55:24

目录

Rewrite简介

1.0 Rewrite实际场景

        1.1 Rewrite跳转场景

        1.2 Rewrite跳转实现

        1.3 Nginx正则表达式

        1.4 Rewrite命令&&语法格式

        1.5 flag标记说明 

2  Location分类

         2.1 Location优先级

3 Rewrite&&Location比较

4 场景跳转实验

4.1 基于域名的跳转


Rewrite简介

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

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用

例:https://mp.csdn.net/mp_block/creation/editor?spm=1000.2415.9901.5352

只能对除了域名和参数之外的字符/mp_block/creation/editor进行匹配

1.0 Rewrite实际场景

  • Nginx跳转需求的实现方式
  1. 使用rewrite进行匹配跳转
  2. 使用if匹配全局变量后跳转
  3. 使用location匹配再跳转
  • rewrite放在 server{},if{},location{} 段中
  1. location只对域名后边的除去传递参数外的字符串起作用
  • 对域名或参数字符串
  1. 使用if全局变量匹配
  2. 使用proxy_pass反向代理

 

1.1 Rewrite跳转场景

  • 使用rewrite进行匹配跳转
  • 使用if匹配全局变量后跳转
  • 使用location匹配再跳转

1.2 Rewrite跳转实现

  • Nginx:通过ngx_http_rewrite_module 模块支持URL重写、只支持if条件判断,但不支持else
  • 跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
  • PCRE支持:perl兼容正则表达式的语法规则匹配
  • 重写模块 set 指令:创建新的变量并设其值

 

1.3 Nginx正则表达式

符号作用
~执行一个正则匹配,区分大小写
~*执行一个正则匹配,不区分大小写
!~执行一个正则匹配,既不匹配全是大写,也不匹配全是小写
!~*不匹配大小写不区分

  ^~

前缀匹配,普通字符匹配,只匹配第一个成功的结果

=精确匹配
@定义一个命名的Location,使用在内部定向的时候
{n}n代表匹配次数
{n,}匹配n次或更多次
{n,m}重复 n 到 m 次
[ ]定义匹配的字符范围
[c]匹配单个字符 c
[a-z]匹配 a-z 小写字母的任意一个
[a-zA-Z0-9]匹配所有大小写字母或数字
()表达式的开始和结束位置
|或运算符

1.4 Rewrite命令&&语法格式

rewrite    <regex>    <replacement>          [flag]
          正则表达式    跳转后的内容      rewrite支持的flag标记

1.5 flag标记说明 

  • last :本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中。

  • break :本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中。

  • redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。

  • permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

  • set:当前规则匹配成功后设置一个变量,并把变量传入下一条规则

2  Location分类

  • location 大致可以分为五类:
  • 精准匹配  location = / {...}    
  •  
  • 前缀匹配  location  ^~ {...}
  •  
  • 一般匹配  location / {...} 
  •  
  • 正则匹配  location ~ / {...}
  •  在nginx.conf的配置文件中location默认使用的是通用匹配 "location /{.....}

2.1 Location优先级

 

3 Rewrite&&Location比较

rewrite :对访问的域名或者域名内的URL路径地址进行本地页面跳转
location:对访问的路径做访问控制或者跨服进行URL跳转

从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。

4 场景跳转实验

4.1 基于域名的跳转

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

 


   vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.lbj.com;			
	charset utf-8;
	access_log  /var/log/nginx/www.lbj.com-access.log;		
	location / {
	#添加域名重定向
        if ($host = 'www.lbj.com'){						
			rewrite ^/(.*)$ http://www.jokic.com/$1 permanent;	
        }
        root   html;
        index  index.html index.htm;
    }
}


echo "192.168.181.101 www.lbj.com www.jokic.com" >> /etc/hosts
systemctl restart nginx

浏览器输入模拟访问 http://www.lbj.com/test/1.html(虽然这个请求内容是不存在的)
会跳转到www.jokic.com/test/1.html,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转。

 

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

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

相关文章

vcruntime140.dll无法继续执行代码怎么办

今天打开photoshop软件的时候&#xff0c;突然间就打不开&#xff0c;电脑报错由于找不到vcruntime140.dll&#xff0c;无法继续执行此代码&#xff0c;然后我就把photoshop卸载了&#xff0c;再重新安装&#xff0c;依然还是报错。这个可怎么办&#xff1f;vcruntime140.dll如…

【笔记】肥胖代码:减肥的秘密

直接原因与根本原因 直接原因与根本原因的区别是什么&#xff1f;直接原因是直接造成体重增加的原因&#xff0c;根本原因是导致事物发生变化的根源。 以酗酒为例。酗酒的原因是什么&#xff1f; 直接原因是饮酒过量。这是不可否认的事&#xff0c;但显然不能解决问题。直接…

佑友防火墙默认口令及RCE漏洞

先用fofa脚本爬取所有碧海威相关资产&#xff08;fofa脚本下载地址&#xff1a;&#xff09; python3 fofa-cwillchris.py -k title"佑友防火墙" 将上面爬取到的文件&#xff08;一般是final****.txt&#xff09;移动到脚本目录下&#xff0c;保存为1.txt ./佑友防…

浅谈智能安全用电系统在轨道交通中的应用

安科瑞 华楠 摘要&#xff1a; 随着轨道交通电气设备的增加和用电负荷的变大&#xff0c;用电安全问题愈发突出&#xff0c;而对电力状况在线监测和故障预警是实现安全用电的关键。本文研究了轨道交通安全用电智能监测系统。该系统通过电力载波技术可利用原电缆进行数据传输&am…

适用ddddocr自动化测试验证码识别

原打算使用tesseract进行验证码识别的但后面发现实在太辣鸡了 不知道tesseract以及没安装的可以看这篇文章&#xff1a; tesseract安装以及联调python 使用tesseract的代码&#xff1a; import pytesseract from PIL import Image, ImageEnhance """ 步骤①&…

DOTA大环配体化合物:DOTA PEG5 amine/azide/DBCO,特点分享说明

一、DOTA-PEG5-amine&#xff0c;DOTA PEG5 NH2&#xff0c;DOTA-PEG5-amine HCl salt&#xff0c;DOTA五聚乙二醇氨基Product structure&#xff1a; 1.CAS No&#xff1a;N/A 2.Molecular formula&#xff1a;C28H54N6O12 3.Molecular weight&#xff1a;666.8 5.Appearance …

【图像处理】去雾代码收(附halcon、python、C#、VB、matlab)

【图像处理】去雾代码收&#xff08;附halcon、python、C#、VB、matlab&#xff09; 一、halcon算法1.1 halcon算法源码1.2 halcon算法效果图![在这里插入图片描述](https://img-blog.csdnimg.cn/8ad5217a59be4de29b5a7b6eee997b85.png#pic_center) 二、opencv算法2.1 python源…

了解架构是什么

前言&#xff1a; \textcolor{Green}{前言&#xff1a;} 前言&#xff1a; &#x1f49e;这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 &#x1f49e;从这个专栏里面可以迅速获得Go的知识 了解架构是什么 01. 什么是架构1.1 定义1.1 问题1.2 什么是架构 - 单机1.3 …

Linux服务器同步Windows目录同步-rsync

前言 最近需要&#xff0c;Linux的服务器同步Windows的一个目录。查了下&#xff0c;大概有三种方法&#xff1a;网盘同步&#xff1b;rsync同步&#xff1b;挂载目录。 网盘同步&#xff0c;可以选择搭建一个Nextcloud 。但是问题在于&#xff0c;我需要的是&#xff0c;客户…

react context上下文与vue中 provide inject的用法区别

一、react中&#xff1a; 数据传递 1、引入createContext import { createContext } from "react"; 2、创建并导出 export const FspThemeContext createContext({}); 3、传递数据&#xff08;value项不能缺少&#xff01;&#xff01;&#xff09; ①不解构…

微流控芯片压力和流量的超高精度串级控制解决方案

摘要&#xff1a;针对微流控芯片压力驱动进样系统中压力和流量的高精度控制&#xff0c;本文提出了国产化替代解决方案。解决方案采用了积木式结构&#xff0c;便于快速搭建起气压驱动进样系统。解决方案的核心是采用了串级控制模式&#xff0c;结合高精度的传感器、电气比例阀…

JMeter如何进行多服务器远程测试

JMeter是Apache软件基金会的开源项目&#xff0c;主要来做功能和性能测试&#xff0c;用Java编写。 我们一般都会用JMeter在本地进行测试&#xff0c;但是受到单个电脑的性能影响&#xff0c;往往达不到性能测试的要求&#xff0c;无法有效的模拟高并发的场景&#xff0c;那么…

云计算服务模式、PaaS、SaaS都是啥?

什么是云计算服务模式 云计算服务模式是指云服务提供商提供的不同类型的云计算服务&#xff0c;包括基础设施即服务&#xff08;IaaS&#xff09;、平台即服务&#xff08;PaaS&#xff09;和软件即服务&#xff08;SaaS&#xff09;等。这些服务可以帮助企业在云端进行资源共…

Mysql找出执行慢的SQL【慢查询日志使用与分析】

分析慢SQL的步骤 慢查询的开启并捕获&#xff1a;开启慢查询日志&#xff0c;设置阈值&#xff0c;比如超过5秒钟的就是慢SQL&#xff0c;至少跑1天&#xff0c;看看生产的慢SQL情况&#xff0c;并将它抓取出来explain 慢SQL分析show Profile。&#xff08;比explain还要详细…

WideResNet(宽残差网络)算法解析-鸟类识别分类-Paddle实战

文章目录 一、理论基础1.前言2.设计理念2.1 ResNet算法2.1.1 residual&#xff08;残差结构&#xff09;模块2.1.2 residual的计算方式2.1.3 ResNet中两种不同的residual2.1.4 Batch Normalization&#xff08;批归一化&#xff09; 2.2 WideResNet(WRNs)算法2.2.1 宽残差块2.2…

vue2项目引入vant组件库

Vant官网 Vant 2 - Mobile UI Components built on Vue

【零基础入门学习Python---Python数据处理和存储保姆级教程】

&#x1f680; Python &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

记一次Tomcat控制台弱口令爆破事件应急响应

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 事件背景介绍02 流量分析过程03 事件分析结果04 安全加固建议 01 事件背景介绍 某内部应急演练中&#xff0c;安全部门在安全设备上观察到大量Tomcat控制台登录请求&#xff0c;现需根据流量情况进…

多线程的CAS(Compare and Swap)机制与乐观锁、AtomicInteger等原子包装类的使用

一.乐观锁 与 CAS机制 在java的多线程并发过程中&#xff1a; ​ 1.当一个对象在多个内存中都存在副本时&#xff0c;如果一个线程在自己的工作内存修改了共享变量&#xff0c;其它线程也应该能够看到被修改后的值。常常用volatile关键字来保证多线程数据的可见性。 ​…

Nginx Rewrite 重写跳转

文章目录 一.Nginx Rewrite概述1.Rewrite跳转场景2.Rewrite跳转场景3.Rewrite跳转实现4.Rewrite实际场景4.1Nginx跳转需求的实现方式4.2 rewrite放在 server{}&#xff0c;if{}&#xff0c;location{} 段中4.3对域名或参数字符串 5.nginx正则表达式5.1 常用的正则表达式元字符 …