Nginx基础——Rewrite规则

article/2025/10/21 20:22:12

点击上方“芋道源码”,选择“置顶公众号”

技术文章第一时间送达!

源码精品专栏

 
  • 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )

  • 中文详细注释的开源项目

  • Java 并发源码合集

  • RocketMQ 源码合集

  • Sharding-JDBC 源码解析合集

  • Spring MVC 和 Security 源码合集

  • MyCAT 源码解析合集

Rewrite规则学习记录

rewrite是nginx一个特别重要的指令,该指令可以使用正则表达式改写URI。可以指定一个或多个rewrite指令,按顺序匹配。

正则匹配规则

1~  区分大小写匹配
2~* 不区分大小写匹配
3!~ 和 !~* 区分大小写不匹配及不区分大小写不匹配

文件及目录匹配

1-f和!-f 判断是否存在文件
2-d和!-d 判断是否存在目录
3-e和!-e 判断是否存在文件或目录
4-x和!-x 判断文件是否可执行

rewrite基本语法

1set
2if
3return
4break
5rewrite

break指令

1使用范围:server,location,if;
2中断当前相同作用域的其他nginx配置。

if指令

1使用范围:server,location
2检查一个条件是否符合。If指令不支持嵌套,不支持多个条件&&和||处理。

return指令

1格式:return code ;
2使用范围:server,location,if;
3结束规则的执行并返回状态码给客户端。

set指令

1使用环境:server,location,if
2定义一个变量,并给变量赋值。变量的值可以为文本、变量或者变量的组合。
3set $var "hello world"

rewrite指令格式

1rewrite regex replacement [flag]
2
3flag标志位有四种:
4break:停止rewrite检测,也就是说当含有break flag的rewrite语句被执行时,该语句就是rewrite的最终结果。 
5last:停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果。
6redirect:返回302临时重定向,一般用于重定向到完整的URL(包含http:部分) 
7permanent:返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)

应用实例(摘自网络)

当访问的文件和目录不存在时,重定向到某个php文件

1if( !-e $request_filename )
2{
3    rewrite ^/(.*)$ index.php last;
4}

目录对换 /123456/xxxx ====> /xxxx?id=123456

1rewrite ^/(\d+)/(.+)/  /$2?id=$1 last;

如果客户端使用的是IE浏览器,则重定向到/ie目录下

1if$http_user_agent ~ MSIE)
2{
3    rewrite ^(.*)$ /ie/$1 break;
4}
1

禁止访问以/data开头的文件

1location ~ ^/data
2{
3    deny all;
4}

禁止访问以.sh,.flv,.mp3为文件后缀名的文件

1location ~ .*\.(sh|flv|mp3)$
2{
3    return 403;
4}

设置某些类型文件的浏览器缓存时间

1location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
2{
3    expires 30d;
4}

文件反盗链并设置过期时间

 1location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ 
2{
3    valid_referers none blocked *.linuxidc.com*.linuxidc.net localhost 208.97.167.194;
4    if ($invalid_referer) {
5        rewrite ^/ http://img.linuxidc.net/leech.gif;
6        return 412;
7        break;
8    }
9    access_log  off;
10    root /opt/lampp/htdocs/web;
11    expires 3d;
12    break;
13}

将多级目录下的文件转成一个文件,增强seo效果

1/job-123-456-789.html 指向/job/123/456/789.html
2
3rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;

域名跳转

1server
2{
3    listen 80;
4    server_name jump.linuxidc.com;
5    index index.html index.htm index.php;
6    root /opt/lampp/htdocs/www;
7    rewrite ^/ http://www.linuxidc.com/;
8    access_log off;
9}

多域名转向

1server_name www.linuxidc.comwww.linuxidc.net;
2index index.html index.htm index.php;
3root  /opt/lampp/htdocs;
4if ($host ~ "linuxidc\.net") {
5    rewrite ^(.*) http://www.linuxidc.com$1permanent;
6}

附录 —— nginx全局变量

 1arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。
2args #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;
3binary_remote_addr #二进制的客户地址。
4body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
5content_length #请求头中的Content-length字段。
6content_type #请求头中的Content-Type字段。
7cookie_COOKIE #cookie COOKIE变量的值
8document_root #当前请求在root指令中指定的值。
9document_uri #与uri相同。
10host #请求主机头字段,否则为服务器名称。
11hostname #Set to themachine’s hostname as returned by gethostname
12http_HEADER
13is_args #如果有args参数,这个变量等于”?”,否则等于”",空值。
14http_user_agent #客户端agent信息
15http_cookie #客户端cookie信息
16limit_rate #这个变量可以限制连接速率。
17query_string #与args相同。
18request_body_file #客户端请求主体信息的临时文件名。
19request_method #客户端请求的动作,通常为GET或POST。
20remote_addr #客户端的IP地址。
21remote_port #客户端的端口。
22remote_user #已经经过Auth Basic Module验证的用户名。
23request_completion #如果请求结束,设置为OK。 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
24request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
25request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
26scheme #HTTP方法(如http,https)。
27server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
28server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
29server_name #服务器名称。
30server_port #请求到达服务器的端口号。





如果你对 Dubbo 感兴趣,欢迎加入我的知识星球一起交流。

640?

知识星球



目前在知识星球(https://t.zsxq.com/2VbiaEu)更新了如下 Dubbo 源码解析如下:

01. 调试环境搭建
02. 项目结构一览
03. 配置 Configuration
04. 核心流程一览

05. 拓展机制 SPI

06. 线程池

07. 服务暴露 Export

08. 服务引用 Refer

09. 注册中心 Registry

10. 动态编译 Compile

11. 动态代理 Proxy

12. 服务调用 Invoke

13. 调用特性 

14. 过滤器 Filter

15. NIO 服务器

16. P2P 服务器

17. HTTP 服务器

18. 序列化 Serialization

19. 集群容错 Cluster

20. 优雅停机

21. 日志适配

22. 状态检查

23. 监控中心 Monitor

24. 管理中心 Admin

25. 运维命令 QOS

26. 链路追踪 Tracing

...
一共 60 篇++


源码不易↓↓↓

点赞支持老艿艿↓↓


http://chatgpt.dhexx.cn/article/YqSXLPOL.shtml

相关文章

F280049C Crossbar X-BAR

文章目录 X-BAR9.1 输入X-BAR9.2 ePWM、CLB和GPIO输出X-BAR9.2.1 ePWM X-BAR9.2.1.1 ePWM X-BAR架构 9.2.2 CLB X-BAR9.2.2.1 CLB X-BAR架构 9.2.3 GPIO输出X-BAR9.2.3.1 GPIO输出X-BAR架构9.2.4 X-BAR标志 总结 X-BAR 交叉开关(在本章中称为X-BAR)提供…

BCGControlBar Pro 31.2 正式版-Key

什么是 MFC 的 BCGControlBar Pro? BCGControlBar(“Business Components Gallery ControlBar”)是一个 MFC 扩展库,企鹅180846090允许您创建具有完全自定义选项(功能区、可自定义工具栏、菜单等)和一组丰富…

BCGControlBar Library for .NET 7.1.1 Crack

什么是 BCGControlBar Library for .NET? BCGControlBar Library for .NET 是 100% 托管代码工具包,用 C/CLI 编写,面向 Microsoft .NET Framework 2.0 或更高版本。该库包含许多高度可定制、完全可设计的组件,使您能够创建最复杂…

BCGControlBar v12的向导使用图解

BCGControlBar专业版是MFC的一个扩展库,您可以用来构建类似于Microsoft Office 2000/XP/2003/2007/2010、Microsoft Visual Studio(打印、用户定制工具栏、菜单等)和其他一些知名产品的高级用户界面。 首先从网上下载BCGControlBar v12资源 &…

MFC界面控件BCGControlBar v33.4 - 日历、属性网格组件升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

BCG学习(一)——BCGControlBar安装与配置

最近工作中需要用到BCG相关的知识,趁着全民防疫、居家隔离这段时间正好学习一下,作此笔记,记录学习过程和心得体会。话不多说,开整! 简介 下载、安装与配置 例程编译与运行 简介 BCG是MFC的一个扩展库,可以…

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 控件、脚本管理增强

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了,此版本包含了Ribbon(功能区)自定义…

MFC界面控件BCGControlBar v33.4 - 支持Win 11 Mica material主题

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

MFC界面控件BCGControlBar v33.4 - 各子控件全面升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

MFC界面控件BCGControlBar v33.3 - 升级Ribbon Bar自定义功能

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 该版本包含了增强的Ribbon自定义、新的日期/时间数字指示器、带有文本对齐的组控件、多行支持以及其他一些新功…

MFC界面控件BCGControlBar v33.3 - 可视化管理器和主题更新

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.3已正式发布了,该版本包含了增强的Ribbon自定义、新的…

BCGControlBar使用说明

BCGControlBar使用说明 1.BCGControlBar简介1.1 概述1.2 开发环境1.3 安装 1.BCGControlBar简介 1.1 概述 BCG是MFC的一个扩展库,可以用来构建类似于Microsoft Office 2003/2007/2010/2013/2016 和 Microsoft Visual Studio-like(打印、用户定制工具栏、…

【MySQL】物化视图

物化视图是相对于视图而言的,但是两者实际上并没有什么关系就如java/javaScript一样 首先mysql的视图不是一种物化视图,他相当于一个虚拟表,本身并不存储数据,当sql在操作视图时所有数据都是从其他表中查询出来的。者带来的问题是…

Oracle——物化视图

文章目录 含义物化视图的语法物化视图的创建1、自动刷新的物化视图 ON COMMIT2、非自动刷新的物化视图 ON demand 关于手动刷新物化视图的删除资料参考 含义 什么是物化视图? 物化视图,通俗点说就是物理化的视图。 什么叫物理化? 将视图以表…

PostgreSQL视图和物化视图

由于每天工作忙碌,好久没更新了,今天更新一下,讲一讲视图和物化视图的概念以及区别吧。 1. 视图 1.1 PostgreSQL视图概述 PostgreSQL中的视图和MySQL中的视图是一样的,在查询的时候进行扫描基础表的操作。 视图表示基础表对应的…

达梦物化视图的使用与管理

文章目录 前言一、关于物化视图所需的权限二、创建手动刷新物化视图1.测试环境构造2.创建手动刷新物化视图3.自动完全更新的物化视图4.自动快速更新的物化视图5.定时更新物化视图 三、物化视图的管理四、总结 前言 物化视图是从一个或几个基表导出的表,同视图相比&…

Oracle物化视图与物化视图日志

文章目录 物化视图物化视图与普通视图的区别创建一个存放person的表创建一个存放person的address的表初始化数据创建物化视图的语句1.build [immediate|deferred]2.refresh [fast|complete|force] 视图刷新的方式:3.MV数据刷新的时间:4.查询重写(QueryRe…

【物化视图的创建和管理】

1物化视图 视图 (VIEW) 可以看做是一种逻辑表,其数据来自于一张表或多张表,不占用物理存储空间。对视图的 DML 操作本质上是对其基表的操作。物化视图和普通视图一样,都是构建在一个查询语句之上的,只是物化视图会存储并刷新视图中…

创建物化视图详解(图解)

创建物化视图详解 一,什么是物化视图 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。 二,作用、 在类似统…

浅谈物化视图

1、什么是物化视图 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。 视图是一个虚拟表(也可以认为是一条语句&#xff0…