Nginx的Location和Rewrite

news/2024/11/29 1:52:12/

目录

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.ppmy.cn/news/615737.html

相关文章

FreeRTOS_列表和列表项

目录 1. 什么是列表和列表项&#xff1f; 1.1 列表 1.2 列表项 1.3 迷你列表项 2. 列表和列表项初始化 2.1 列表初始化 2.2 列表项初始化 3. 列表项插入 3.1 列表项插入函数分析 3.2 列表项插入过程图示 3.2.1 插入值为 40 的列表项 3.2.2 插入值为 60 的列表项 3…

计算机主机外设接口,2002.12计算机组成原理§1主机与外设的连接.ppt

2002.12计算机组成原理1主机与外设的连接 第十章 现代计算机系统中外部设备的种类繁多&#xff0c;各类外部设备不仅结构组成和工作原理不同&#xff0c;而且与主机的连接方式也是复杂多变的。因此&#xff0c;计算机的输入/输出子系统成为整个计算机系统中最具有多样性和复杂性…

台式计算机音响外设插入,台式机提示外设没有插上

台式机提示外设没有插上 导读&#xff1a;小编根据大家的需要整理了一份关于《台式机提示外设没有插上》的内容&#xff0c;具体内容&#xff1a;电脑没有声音提示“外设似乎没有插上”怎么办&#xff0c;很多人在重装系统后&#xff0c;特别是win系统重装后&#xff0c;我们再…

CPU与外设传输方式

如果外设想要工作&#xff0c;那么他就必须去找CPU请求服务&#xff0c;只有得到CPU的批准&#xff0c;这样才可以为其分配计算机资源&#xff0c;让其完成任务。 随着进步&#xff0c;CPU与外设之间产生了4种访问方式。 1.轮询方式。 每隔一段时间CPU就会在一定的周期时间内…

CPU与外设之间交换方式

什么是输入输出 输入输出系统是计算机系统中的主机与外部进行通信的系统。它由外围设备和输入输出控制系统两部分组成&#xff0c;是计算机系统的重要组成部分。外围设备包括输入设备、输出设备和磁盘存储器、磁带存储器、光盘存储器等。从某种意义上也可以把磁盘、磁带和光盘…

STM32基础和常见外设

STM32 开发环境 安装MDK软件在桌面创建一个用于专门保存是stm32 的文件夹安装芯片包打开软件新建工程&#xff08;Project&#xff09;保存到文件夹将启动文件添加到文件夹 点亮LED灯 配置使能APB2的GPIOC时钟 *(unsigned int *)0x4002 1010 | 0x01 << 4 //起始地址偏…

片内外设、片上外设和片外外设的区别

片内外设就是片上外设&#xff0c;同一种意思不同说法而已。 片内外设和片外外设的区别&#xff1a; 片内、外设是两个概念&#xff0c;片内指做成芯片的集成电路内部&#xff0c;简称片内&#xff0c;片外同理显而易见&#xff1b;外设是外部设备的简称&#xff0c;是指集成…

iOS连接外设的几种方式

一般iOS开发者做APP开发大部分时候都是通过Http(s)请求跟后台服务器打交道&#xff0c;做一些信息展示和用户交互。很少涉及到去跟外部硬件设备连接的开发。随着近年来车联网和物联网的兴起&#xff0c;智能家居和智能硬件的逐步火热&#xff0c;越来越多的app被开发出来&#…