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

Nginx 精解:正则表达式、location 匹配与 rewrite 重写

一、常见的 Nginx 正则表达式

在 Nginx 配置中,正则表达式用于匹配和重写 URL 请求。以下是一些常见的 Nginx 正则表达式示例:

当涉及正则表达式时,理解各个特殊字符的含义是非常重要的。以下是每个特殊字符的例子:

  1. ^:匹配输入字符串的起始位置

    • 示例:^hello 匹配以 "hello" 开头的字符串,
    • 示例:^/(user|profile): 匹配以 "/user" 或 "/profile" 开头的 URI。
  2. $:匹配输入字符串的结束位置

    • 示例:world$ 匹配以 "world" 结尾的字符串
  3. *:匹配前面的字符零次或多次

    • 示例:colou*r 匹配 "color" 或 "colour"
  4. +:匹配前面的字符一次或多次

    • 示例:go+l 匹配 "gol", "gool", "gooool", 等等
  5. ?:匹配前面的字符零次或一次

    • 示例:apple(s)? 匹配 "apple" 或 "apples"
  6. .:匹配除 "\n" 之外的任何单个字符

    • 示例:b.t 匹配 "bat", "but", "b@t", 等等
  7. \:将后面接着的字符标记为一个特殊字符

    • 示例:\.jpg$: 匹配以 ".jpg" 结尾的 URI。
    • 示例:\d+ 匹配一个或多个数字
  8. {n}:重复 n 次

    • 示例:a{3} 匹配 "aaa"
  9. {n,}:重复 n 次或更多次

    • 示例:b{2,} 匹配 "bb", "bbb", "bbbb", 等等
  10. {n,m}:重复 n 到 m 次

    • 示例:c{2,4} 匹配 "cc", "ccc", "cccc"
  11. []:定义匹配的字符范围

    • 示例:[aeiou] 匹配任何一个元音字母
    • 示例:[0-9] 匹配任何一个数字
  12. [c]:匹配单个字符 c

    • 示例:[abc] 匹配 "a", "b", 或 "c"
  13. [a-z]:匹配 a-z 小写字母的任意一个

    • 示例:[a-z] 匹配任何一个小写字母
  14. [a-zA-Z0-9]:匹配所有大小写字母或数字

    • 示例:[a-zA-Z0-9] 匹配任何一个大小写字母或数字
  15. ():表达式的开始和结束位置

    • 示例:(abc) 匹配 "abc"
  16. |:或运算符

    • 示例:cat|dog 匹配 "cat" 或 "dog"

这些正则表达式可用于识别特定的 URL 模式,并据此进行重定向或其他操作。

二、Nginx Location基本操作

2.1 Location 大致可以分为三类

在 Nginx 配置中,location 主要分为三类:精确匹配、前缀匹配和正则表达式匹配。

  • 精确匹配:指定完整的 URI 进行匹配。location = / {...}
  • 前缀匹配:指定 URI 的前缀进行匹配。location / {...}
  • 正则表达式匹配:使用正则表达式进行匹配。正则匹配:location ~ / {...}

示例:

location = /about {# 精确匹配
}location /blog/ {# 前缀匹配
}location ~* \.(gif|jpg|jpeg)$ {# 正则表达式匹配
}


 

这些不同的匹配规则使得我们能够根据不同的需求来灵活地配置服务器。

2.2 Location 常用的匹配规则

在 location 中,有一些常用的匹配规则,例如:

  • =: 精确匹配。也就是完全匹配
  • ^~: 前缀匹配,如果匹配成功,停止搜索其他 location。
  • ~ 和 ~*: 区分大小写和不区分大小写的正则表达式匹配。
  • !~ :区分大小写的匹配取非。!~* :不区分大小写的匹配取非。

这些匹配规则决定了如何匹配 URI,并且影响着 location 的优先级。

2.3 Location 优先级

在 Nginx 中,location 的优先级遵循“先精确匹配,再前缀匹配,最后正则表达式匹配”的原则。这意味着精确匹配的 location 会优先匹配,其次是前缀匹配,最后是正则表达式匹配。


 

2.4 Location 示例说明

假设我们有以下几个 location 规则:

location = /about { # 精确匹配 }location /blog/ { # 前缀匹配 }location ~* \.(gif|jpg|jpeg)$ { # 正则表达式匹配 }

当请求 URI 为 "/about" 时,将匹配第一个规则,因为它是精确匹配。请求 URI 为 "/blog/some-article" 时,将匹配第二个规则,因为它是前缀匹配。而请求 URI 为 "/image.jpg" 时,将匹配第三个规则,因为它是正则表达式匹配。

location = / {# 这里匹配根目录的请求,不包括任何额外的路径# =为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配
}location /user/ {# 匹配以 /user/ 开头的所有请求,比如 /user/profile、/user/settings 等# 匹配任何以 /user/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条
}location ~* \.(css|js)$ {# 匹配所有以 .css 或 .js 结尾的请求,不区分大小写
}location ^~ /admin {# 匹配以 /admin 开头的请求,并且停止匹配其它正则规则
}location ~ ^/article/(\d+) {# 匹配类似 /article/123、/article/456 这样的数字结尾的请求
}
2.5 Location 匹配顺序

在 Nginx 中,location 的匹配顺序非常重要。通常情况下,应该按照从精确匹配到前缀匹配再到正则表达式匹配的顺序进行配置,以确保匹配的准确性。

2.6  三个匹配规则定义
2.6.1 直接匹配网站根

第一个必选规则直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网,可以是一个静态首页,也可以直接转发给后端应用服务器

对于直接匹配网站根的需求,可以使用如下配置:

location = / { # 处理根目录请求 root   html;index  index.html index.htm;
}
2.6.2 处理静态文件请求

第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

静态文件通常位于特定的目录中,可以使用前缀匹配来处理静态文件请求:

目录匹配:
location /static/ { # 处理静态文件请求 root /usr/share/nginx/html/;index  index.html index.htm;try_files $uri $uri/ /dp/index.html = systemUpdate;
}
后缀匹配:
location ~* \.(xlsx|jpg)$ { # 处理特定类型的请求 root /usr/share/nginx/html/file;
}
2.6.3 通用规则

第三个规则就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器
非静态文件请求就默认是动态请求

location / {proxy_pass http://127.0.0.1:8080;
}

通过以上配置示例,我们可以更好地理解 Nginx 中 location 的匹配规则和优先级。

三、Nginx Rewrite基本操作

rewrite 功能是利用 Nginx 提供的全局变量或自定义变量,结合正则表达式和标志位来实现 URL 的重写和重定向。它通常用于处理域名更换后的跳转、页面地址变更的重定向、网站防盗链等需求。

rewrite 指令可以放置在 server、location 和 if 块中,它默认只对域名后面除了传递的参数之外的字符串进行匹配重写。比如,对于 URL http://www.baidu.com/abc/bbs/index.php?a=1&b=2,rewrite 只会对 /abc/bbs/index.php 部分进行重写。

下面是 rewrite 的语法格式:

rewrite <regex> <replacement> [flag];

其中:

  • regex 表示正则表达式匹配规则。
  • replacement 表示重定向后的内容。
  • flag 表示 rewrite 支持的标志位。
3.1 rewrite 跳转实现

使用 rewrite 可以对 URL 进行重定向或重写,常用于实现网站 URL 的美化、重定向等功能。

Nginx 通过 ngx_http_rewrite_module 模块支持 URL 重写,它也支持 if 条件判断,但不支持 else。在进行跳转时,从一个 location 跳转到另一个 location,但最多只能执行 10 次跳转,否则 Nginx 将返回 500 错误。使用 PCRE 语法规则进行匹配,并通过重写模块的 set 指令创建新的变量并设置其值。

3.2 rewrite 执行顺序

rewrite 指令按照配置文件中的先后顺序执行,匹配成功后会立即执行相应的重定向或重写操作。

  1. 执行 server 块内的 rewrite 指令。
  2. 进行 location 匹配。
  3. 在选定的 location 中执行 rewrite 指令。
3.3 flag 标记说明
  • last:本条规则匹配完成后,继续向下匹配新的 location URL 规则,一般用于 server 和 if 块中。
  • break:本条规则匹配完成后立即终止,不再匹配后续的任何规则,一般用于 location 块中。
  • redirect:返回 302 临时重定向,浏览器地址栏会显示跳转后的 URL 地址。
  • permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址。

四、rewrite 和 location 区别

rewrite 和 location 在功能上有些相似,都能实现跳转,但主要区别在于:

  • rewrite 用于在同一域名内更改获取资源的路径。
  • location 用于对一类路径进行访问控制或反向代理,也可以用proxy_pass将请求代理到其他机器。

五、Nginx Rewrite 示例

5.1 基于域名的跳转

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

vim /usr/local/nginx/conf/nginx.conf #编辑nginx配置文件
server {listen       80;server_name  www.tong.com;  #域名修改  charset utf-8;access_log  /var/log/nginx/access.log;  #日志修改location / {#添加域名重定向if ($host = 'www.tong.com'){       #$host为rewrite全局变量,代表请求主机头字段或主机名 rewrite ^/(.*)$ http://www.ctt.com/$1 permanent;   #$1为正则匹配的内容,即“域名/”之后的字符串}root   html;index  index.html index.htm;}}
echo "192.168.80.20 www.tong.com www.ctt.com" >> /etc/hosts    #修改本地host映射
#创建test/1.htmlcd /usr/local/nginx/htmlmkdir test #创建目录echo "测试web1" > test/1.html

systemctl restart nginx  #重启nginx服务


 

浏览器输入模拟访问 http://www.tong.com/test/1.html(虽然这个请求内容是不存在的)

会跳转到www.ctt.com/test/1.html,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转。


 

5.2 基于客户端 IP 访问跳转

今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.80.20访问正常。

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.tong.com;      #域名修改  charset utf-8;access_log  /var/log/nginx/access.log;      #日志修改#设置是否合法的IP标记set $rewrite true;                    #设置变量$rewrite,变量值为boole值true#判断是否为合法IP#remode_addr表示客户端if ($remote_addr = "192.168.80.20"){  #当客户端IP为192.168.80.20时,将变量值设为false,不进行重写set $rewrite false;}#除了合法IP,其它都是非法IP,进行重写跳转维护页面if ($rewrite = true){                 #当变量值为true时,进行重写rewrite (.+) /web.html;           #将域名后边的路径重写成/web.html,例如www.tong.com/web.html}location = /web.html {root /var/www/html;               #网页返回/var/www/html/web.html的内容}location / {root   html;index  index.html index.htm;}}



 

echo "页面维护中。。。" > /var/www/html/web.html

systemctl restart nginx

只有本机能跳转,其他机子直接跳转到web界面

如果rewrite (.+) /web.html; 改成rewrite (.+) /web.html permanent; 的话,如果是非 192.168.80.20

的主机访问会使浏览器修改请求访问的URL成 http://www.tong.com/web.html 再请求访问,这样就会进入

一直在 rewrite 的死循环,访问请求会一直被重写成 http://www.tong.com/web.html 再请求访问

5.3 基于旧域名跳转到新域名后面加目录

现在访问的是 http://www.tong.com/post/,现在需要将这个域名下面的访问都跳转到http://www.ctt.com/tong/post/

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.tong.com;      #域名修改  charset utf-8;access_log  /var/log/nginx/access.log;#添加location /post {rewrite (.+) http://www.ctt.com/tong$1 permanent;       #这里的$1为位置变量,代表/post}location / {root   html;index  index.html index.htm;}}

mkdir -p /usr/local/nginx/html/tong/postecho "测试web4" >> /usr/local/nginx/html/tong/post/1.htmlecho "192.168.80.20 tong.com" >> /etc/hosts
systemctl restart nginx

使用浏览器访问 http://tong.com/post/1.html 跳转到 http://www.ctt.com/tong/post/1.html


 

5.4 基于参数匹配的跳转

现在访问http://www.tong.com/100-(100|200)-100.html 跳转到http://www.tong.com页面。

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.tong.com;      #域名修改  charset utf-8;access_log  /var/log/nginx/access.log;if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {    #\d代表匹配数字,+代表匹配1个或多个rewrite (.+) http://www.tong.com permanent;}location / {root   html;index  index.html index.htm;}}
systemctl restart nginx

$request_uri:包含请求参数的原始URI,不包含主机名,如:http://www.tong.com/cao/tong/index.html?a=1&b=2 中的 /cao/tong/index.php?a=1&b=2

$uri:这个变量指当前的请求URI,不包括任何参数,如:/cao/tong/index.html

$document_uri:与$uri相同,这个变量指当前的请求URI,不包括任何传递参数,如:/cao/tong/index.html

使用浏览器访问 http://www.tong.com/100-200-100.html 或 http://www.tong.com/100-100-100.html 跳转到http://www.tong.com页面。#100-200只能输入100或200



 

5.5 基于目录下所有 php 结尾的文件跳转

要求访问 http://www.ctt.com/upload/123.php 跳转到首页。

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.ctt.com;       #域名修改  charset utf-8;access_log  /var/log/nginx/access.log;location ~* /upload/.*\.php$ {rewrite (.+) http://www.ctt.com permanent;}location / {root   html;index  index.html index.htm;}}
systemctl restart nginx

浏览器访问 http://www.ctt.com/upload/123.php 跳转到http://www.ctt.com页面。
 

5.6 基于最普通一条 url 请求的跳转

要求访问一个具体的页面如 http://www.tong.com/cao/123.html 跳转到首页

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.tong.com;      #域名修改  charset utf-8;access_log  /var/log/nginx/www.tong.com-access.log;location ~* ^/cao/123.html {rewrite (.+) http://www.tong.com permanent;}location / {root   html;index  index.html index.htm;}}


 

systemctl restart nginx

六、总结

  1. Location 指令

    • location 指令用于定义请求的匹配规则以及相应的处理方式。
    • 可以使用不同的匹配规则来满足不同的需求,例如精确匹配、前缀匹配、正则表达式匹配等。
    • location 块中可以包含多个其他指令,如 proxy_passroot 等,用于指定请求匹配时的处理逻辑。
  2. Rewrite 指令

    • rewrite 指令用于对请求的 URI 进行重写,实现 URL 的重定向或改写。
    • 可以通过简单的重写规则或者正则表达式来实现灵活的 URL 重定向。
    • 使用 permanent 参数可以实现永久重定向,而不使用参数则表示临时重定向。
  3. 常见应用场景

    • 使用 location 指令可以根据请求的 URL 路径将请求分发到不同的处理逻辑,例如静态文件的服务、反向代理等。
    • 通过 rewrite 指令可以实现 URL 的重写,将请求重定向到指定的 URL 地址,或者修改请求的 URI。
  4. 注意事项

    • 在使用 rewrite 指令时,需要小心处理,避免出现重定向循环或者意外的重写结果。
    • 合理设计 location 匹配规则,避免产生歧义或冲突,保证请求能够按预期进行处理。

总的来说,Nginx 中的 locationrewrite 指令为我们提供了强大的 URL 路由控制和重定向能力,能够帮助我们更好地管理 Web 服务器的请求处理流程。合理地使用这两个指令可以提升网站性能、实现灵活的请求处理逻辑。

相关文章:

Nginx 精解:正则表达式、location 匹配与 rewrite 重写

一、常见的 Nginx 正则表达式 在 Nginx 配置中&#xff0c;正则表达式用于匹配和重写 URL 请求。以下是一些常见的 Nginx 正则表达式示例&#xff1a; 当涉及正则表达式时&#xff0c;理解各个特殊字符的含义是非常重要的。以下是每个特殊字符的例子&#xff1a; ^&#xff1…...

代码随想录算法训练营Day37|56.合并区间、738.单调递增的数字、968.监控二叉树

合并区间 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 和之前的思路类似&#xff0c;先创建一个ans二维数组&#xff0c;创建start和end来指明添加进入ans数组的区间下标&#xff0c;先对数组按照首元素排序从小到大排序后&#xff0c;根据当前元素是否小于下一个元…...

Web前端开发12章:深入探索与实战解析

Web前端开发12章&#xff1a;深入探索与实战解析 在数字化浪潮的推动下&#xff0c;Web前端开发技术日新月异&#xff0c;成为了构建互联网应用的重要基石。本文将以12章的篇幅&#xff0c;从四个方面、五个方面、六个方面和七个方面&#xff0c;深入探索Web前端开发的精髓&am…...

八股操作系统和计算机网络

5.线程间的同步的方式有哪些&#xff1f; 6.PCB(不熟悉) 进程状态 什么是僵尸进程和孤儿进程&#xff1f; 进程调度算法 死锁的理解 举个发生死锁的例子 解决死锁的方式 内存管理做了哪些事情 什么是内存碎片 常见的内存管理 段表通过什么数据结构实现地址映射 分段机制为什么会…...

正能量情感语录热门素材文案去哪里找?文案素材网站分享

正能量情感语录热门素材文案去哪里找&#xff1f;文案素材网站分享 想为你的作品注入正能量和情感温度&#xff1f;不知如何获取热门情感语录素材&#xff1f;别担心&#xff0c;今天我将为大家推荐一些海外知名的素材网站&#xff0c;让你轻松找到受欢迎的文案素材&#xff…...

bean实例化

黑马程序员SSM 文章目录 一、bean是如何创建的二、实例化bean的三种方式3.1 构造方法&#xff08;常用&#xff09;3.2 静态工厂3.3 实例化工厂&#xff08;了解&#xff09;3.4 FactoryBean 一、bean是如何创建的 Spring 创建bean的时候使用的是无参构造 二、实例化bean的三…...

Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…...

【PL理论】(24) C- 语言:有块的作用域 | 更新的语法 | 新的语义域 | 环境 vs. 内存

&#x1f4ad; 写在前面&#xff1a;我们将再次扩展之前的C语言&#xff0c;让我们向这种语言引入“作用域”的概念。 目录 0x00 C- 语言&#xff1a;有块的作用域 0x01 C- 语言&#xff1a;更新的语法 0x02 新的语义域 0x03 环境 vs. 内存 0x00 C- 语言&#xff1a;有块的…...

React native 使用Animated 优化连续setState 性能问题

再部分场景下我们需要连续更新state刷新页面。一般情况刷新使用setstate没有问题&#xff0c;当需要连续刷新的情况会有明显的性能问题。 场景&#xff1a;自定义可拖动抽屉组件 新增需求在抽屉活动是更新主页面组件样式&#xff0c;此时需要动态传递抽屉高度修改主页组件属性…...

Qt中的事件循环

Gui框架一般都是基于事件驱动的&#xff0c;Qt也不例外&#xff0c;在 Qt 框架中&#xff0c;事件循环&#xff08;Event Loop&#xff09;是一个核心机制&#xff0c;负责管理和分发应用程序中的所有事件和消息。它确保了应用程序能够响应用户输入、定时器事件、窗口系统事件等…...

JVM常用概念之线程本地分配缓冲区(ThreadLocal Allocation Buffer,TLAB)

当实例化一个Java类时&#xff0c;运行时环境必须为相关实例分配存储空间&#xff0c;在JRE中此存储空间分配操作是由内存管理器实现的&#xff08;其实是JVM的垃圾回收器&#xff09;&#xff0c;由于内存管理器通常使用与运行时目标语言不同的语言编写&#xff08;例如&#…...

大模型生成的常见Top-k、Top-p、Temperature参数

参考&#xff1a; https://zhuanlan.zhihu.com/p/669661536 topK&#xff0c;topP https://www.douyin.com/video/7380126984573127945 主要是softmax产生的词表每个词的概率分布后&#xff0c; topK&#xff0c;比如K3&#xff0c;表示采样概率最大的前3个&#xff0c;其他全…...

ppt添加圆角矩形,并调整圆角弧度方法

一、背景 我们看的论文&#xff0c;许多好看的图都是用PPT做的&#xff0c;下面介绍用ppt添加圆角矩形&#xff0c;并调整圆角弧度方法。 二、ppt添加圆角矩形&#xff0c;并调整圆角弧度 添加矩形&#xff1a; 在顶部工具栏中&#xff0c;点击“插入”选项卡。 在“插图”…...

测评要求+基本措施+对应产品

基本要求项测评项基本措施对应产品 网络架构 网络架构 网络架构应保证网络各个部分的带宽满足业务高峰期需要&#xff1b;带宽管理流量控制系统 网络架构 网络架构 网络架构应避免将重要网络区域部署在边界处&#xff0c;重要网络区域与其他网络区域之间应采取可靠的技术隔离手…...

什么是git?

前言 Git 是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。是的&#xff0c;我对git的介绍就一条&#xff0c;想看简介的可以去百度一下&#x1f618;&#x1f618;&#x1f618; 为什么要用git&#xff1f; OK&#xff0c;想象一下…...

C/C++中内存开辟与柔性数组

C/C中内存的开辟 在C中&#xff0c;我们都知道有三个区&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结 束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指…...

编程App软件优化是什么

编程App软件优化是什么 在数字化时代&#xff0c;编程App软件已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着技术的不断进步和用户需求的日益多样化&#xff0c;如何对编程App软件进行优化&#xff0c;以提供更高效、更流畅的用户体验&#xff0c;成为了开…...

爱了爱了,11款超良心App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/今天&#xff0c;我们向你推荐十款与众不同但又不错的win10软件&#xff0c;它们都有各自的功能和优点&#xff0c;相信你一定会喜欢。 1.图片处…...

Linux基础指令(二)(文件、权限等)

目录 普通文件的操作 touch cat 翻页 标准输出重定向&#xff1a; 标准输出重定向种类&#xff1a;​​​​​​​ 管道符&#xff1a;&#xff5c; 压缩指令&#xff1a; zip gzip tar Linux下最常见的打包指令 其他系统指令&#xff1a;​​​​​​​ 快捷…...

爆火的治愈系插画工具又来了,额度居然有18w,根本花不完?

AI治愈插画又又又来了 今天给大家推荐一款完全免费的软件&#xff0c;用过的人都说好&#xff01; 先来看看我生成的图 制作过程非常简单&#xff0c;输入你想要生成的画面咒语。 工具地址&#xff1a;https://www.qiyuai.net/ 模型目前有两种 我上面的图就是用的第一种通用…...

Qt 实战(4)信号与槽 | 4.3、信号连接信号

文章目录 一、信号连接信号1、什么是信号连接信号&#xff1f;2、如何实现信号连接信号3、总结 前言&#xff1a; 在Qt框架中&#xff0c;信号与槽&#xff08;Signals and Slots&#xff09;机制是对象间通信的核心。通常情况下&#xff0c;我们习惯于将信号连接到槽函数上&am…...

Day 16:3040. 相同分数的最大操作数目II

Leetcode 相同分数的最大操作数目II 给你一个整数数组 nums &#xff0c;如果 nums 至少 包含 2 个元素&#xff0c;你可以执行以下操作中的 任意 一个&#xff1a; 选择 nums 中最前面两个元素并且删除它们。选择 nums 中最后两个元素并且删除它们。选择 nums 中第一个和最后一…...

Go基础编程 - 07 - 字典(map)及其约束

字典&#xff08;map&#xff09; 下一篇&#xff1a;结构体1. 声明2. nil 值字典3. 判断某个键是否存在4. 遍历5. delete() 删除键值对6. 约束7. 扩展 上一篇&#xff1a;指针 下一篇&#xff1a;结构体 map 是一种无序的基于 key-value 的数据结构&#xff0c;Go 语言中的 …...

WebSocket 快速入门 与 应用

WebSocket 是一种在 Web 应用程序中实现实时、双向通信的技术。它允许客户端和服务器之间建立持久性的连接&#xff0c;以便可以在两者之间双向传输数据。 以下是 WebSocket 的一些关键特点和工作原理&#xff1a; 0.特点&#xff1a; 双向通信&#xff1a;WebSocket 允许服务…...

使用Spring Cloud设计电商系统架构

在当今互联网高速发展的时代&#xff0c;电子商务系统成为了商家与用户互动的主要方式之一。为了能够更好地应对高并发、可扩展性、灵活性等需求&#xff0c;微服务架构逐渐成为设计电商系统的首选方案。Spring Cloud作为一个成熟的微服务框架&#xff0c;为开发人员提供了一整…...

揭开 Docker 容器的神秘面纱:深入理解容器原理

前言 前几年比较火的是微服务&#xff0c;再然后就是云。讨论技术必谈微服务&#xff0c;要上云&#xff0c;开发出的产品也都是某某云。现在讨论比较少了&#xff0c;因为AI盖过他们。还有就是因为容器技术&#xff0c;现在几乎都是k8s&#xff0c;云原生。要比较快的上手k8s…...

Elasticsearch:Open Crawler 发布技术预览版

作者&#xff1a;来自 Elastic Navarone Feekery 多年来&#xff0c;Elastic 已经经历了几次 Crawler 迭代。最初是 Swiftype 的 Site Search&#xff0c;后来发展成为 App Search Crawler&#xff0c;最近又发展成为 Elastic Crawler。这些 Crawler 功能丰富&#xff0c;允许以…...

C 语言连接MySQL 数据库

前提条件 本机安装MySQL 8 数据库 整体步骤 第一步&#xff1a;开启Windows 子系统安装Ubuntu 22.04.4&#xff0c;安装MySQL 数据库第三方库执行 如下命令&#xff1a; sudo aptitude install libmysqlclient-dev wz2012LAPTOP-8R0KHL88:/mnt/e/vsCode/cpro$ sudo aptit…...

【探索Linux】P.34(HTTPS协议)

阅读导航 引言一、HTTPS是什么1. 什么是"加密"2. 为什么要加密3. 常见的加密方式&#xff08;1&#xff09;对称加密&#xff08;2&#xff09;非对称加密 二、证书认证1. CA认证 三、HTTPS的加密底层原理✅非对称加密对称加密证书认证 温馨提示 引言 在上一篇文章中…...

Python 踩坑记 -- 调优

前言 继续解决问题 慢 一个服务运行有点慢&#xff0c;当然 Python 本身不快&#xff0c;如果再编码不当那这个可能就是量级上的劣化。 整个 Code 主线逻辑 1700&#xff0c;各依赖封装 3000&#xff0c;主线逻辑也是很久远的痕迹&#xff0c;长函数都很难看清楚一个 if els…...

网站建设的概念/关键词查询工具有哪些

目录关键词1&#xff1a;隔离关键词2&#xff1a;限制通过前面的文章&#xff0c;我们可以得出以下几点事实&#xff1a;容器技术的兴起源于 Paas 技术的普及Docker 公司发布的 Docker 项目具有里程碑式的意义Docker 项目通过容器镜像&#xff0c;解决了应用打包这个根本性难题…...

wordpress 慢 优化/网址域名注册信息查询

Handler的基本概念 当有一段处理耗时比较漫长的时候&#xff0c;我们就需要用线程来处理。Android中是用Handler类来处理线程的。 与Handler绑定的有两个队列&#xff0c;一个为消息队列&#xff0c;另一个为线程队列。Handler可以通过这两个队列来分别&#xff1a; 【消息队…...

互联网网站开发服务合同/友情链接交换统计表

1. 问题描述&#xff1a; 给定一个长度为 n 的 01 字符串。请你判断&#xff0c;其中是否存在子串 1111111 或 0000000。 输入格式 一行&#xff0c;一个 01 字符串。 输出格式 如果存在子串 1111111 或 0000000&#xff0c;则输出 YES&#xff0c;否则输出 NO。 数据范围…...

网站开发vs设计报告/微信软文广告经典案例

来自&#xff1a;http://www.it165.net/pro/html/201505/42504.html 一、前言 上篇有提到在WebAPI项目内&#xff0c;通过在Nuget里安装&#xff08;Microsoft.AspNet.WebApi.HelpPage&#xff09;可以根据注释生成帮助文档&#xff0c;查看代码实现会发现是基于解析项目生成的…...

做足彩网站推广/东莞网络营销全网推广

大家好&#xff0c;我是 CUGGZ。今天来分享 12 个 yyds 的微信小程序开源项目&#xff0c;速速收藏&#xff01;全文概览&#xff1a;wechat-app-mall&#xff1a;微信小程序商城&#xff1b;Vant Weapp&#xff1a;小程序 UI 组件库&#xff1b;iView Weapp&#xff1a;小程序…...

东莞最好的网站建设价格低/广州seo培训

满心热情与兴奋&#xff0c;最后变成了遗憾和伤心。 嗯&#xff0c;还有尴尬。 给61级讲Prim&#xff0c;课件合起来的话大概做了有一天多吧。 虽然没什么东西&#xff0c;但还是很用心地给他们写解释、流程&#xff0c;找例题习题&#xff0c;甚至还给他们出了一道题。 给他们…...