Nginx—Rewrite
目录
一、Nginx—Rewrite概述
1、常用的Nginx正则表达式
2、Rewrite功能
3、Rewrite跳转实现
4、Rewrite执行顺序和语法格式
二、location概述
1、location分类
2、location 常用的匹配规则
3、location 优先级
案例一:
案例二:
案例三:
案例四:
案例五:
案例六:
案例七:
案例八:
案例九:
三、Nginx 常见网站配置示例
3.1、网站根目录匹配规则
3.2、静态文件处理规则
3.3、动态请求转发规则
四、Rewrite 案例
1、基于域名的跳转
2、基于客户端 IP 访问跳转
3、基于旧域名跳转到新域名后面加目录
4、基于参数匹配的跳转
5、基于目录下所有 php 结尾的文件跳转
6、基于最普通一条 url 请求的跳转
一、Nginx—Rewrite概述
1、常用的Nginx正则表达式
| ^ | 匹配输入字符串的起始位置 |
| $ | 匹配输入字符串的结束位置 |
| * | 匹配前面的字符零次或多次 |
| + | 匹配前面的字符一次或多次 |
| ? | 匹配前面的字符零次或一次 |
| . | 匹配除 \n 之外的任何单个字符 |
| \ | 转义字符,使后面的字符被视为普通字符或特殊字符 |
| \d | 匹配数字(相当于 [0-9]) |
| {n} | 匹配前面的字符恰好 n 次 |
| {n,} | 匹配前面的字符至少 n 次 |
| {n,m} | 匹配前面的字符至少 n 次,至多 m 次 |
| [] | 定义字符集,匹配括号内的任意单个字符 |
| [c] | 匹配单个字符 c |
| [a-z] | 匹配小写字母中的任意一个 |
| [a-zA-Z0-9] | 匹配所有大小写字母或数字 |
| () | 组括号,分组和捕获子表达式 |
2、Rewrite功能
①、使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
- 比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。
②、rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,
- 例如:http://www.kgc.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写。
3、Rewrite跳转实现
ngx_http_rewrite_module 模块:
- 支持 URL 重写和条件判断。
- 通过
if指令支持条件判断,但不支持else。
URL 跳转:
- 可以在
location块中使用rewrite指令实现从一个location跳转到另一个location。 - 跳转循环最多执行 10 次,超过 10 次会导致 Nginx 返回 500 错误。
PCRE 支持:
- 支持 Perl 兼容正则表达式(PCRE)语法规则进行匹配。
set 指令:
- 用于创建新的变量并设定其值。
4、Rewrite执行顺序和语法格式
①、执行顺序:
执行 server 块中的 rewrite 指令:
- 在
server块中定义的rewrite指令首先被执行,用于处理请求。
执行 location 匹配:
- 根据请求的 URI,Nginx 会匹配最合适的
location块。
执行选定的 location 中的 rewrite 指令:
- 在匹配到的
location块中,执行该块内定义的rewrite指令。
②、语法格式:
rewrite <regex> <replacement> [flag];
regex:
- 表示用于匹配请求 URL 的正则表达式规则。
-
replacement:- 表示 URL 重写后的目标内容或路径。
flag(可选):
- 用于指定重写的标志,影响重写操作的行为。
常见标志包括:
last:停止当前location的匹配过程,重新选择合适的location。break:停止当前location的匹配过程,并继续执行当前location中的其他指令。redirect:发出一个临时的 302 重定向响应。permanent:发出一个永久的 301 重定向响应。
二、location概述
1、location分类
①、精准匹配
- 语法:
location = / {...} - 说明:严格匹配指定的 URI,只有当请求的 URI 完全匹配时,才会应用该
location块中的配置。
②、一般匹配:
- 语法:
location / {...} - 说明:前缀匹配,请求的 URI 以指定的前缀开头时会匹配该
location块。适用于大多数简单的 URI 匹配情况。
③、正则匹配:
- 语法:
location ~ /regex {...} - 说明:使用正则表达式进行匹配,适用于复杂的 URI 匹配场景。正则匹配会在一般匹配后进行。
2、location 常用的匹配规则
| 匹配规则 | 说明 | 示例 |
|---|---|---|
| = | 精确匹配 URI,URI 必须完全匹配时才应用 | location = /yudh { ... } |
| ^~ | 普通字符前缀匹配,匹配成功后停止其他 location 匹配 | location ^~ /images/ { ... } |
| ~ | 区分大小写的正则表达式匹配 | location ~ .jpg$ { ... } |
| ~* | 不区分大小写的正则表达式匹配 | location ~* .jPg$ { ... } |
| !~ | 区分大小写的正则表达式匹配取非 | location !~ .jpg$ { ... } |
| !~* | 不区分大小写的正则表达式匹配取非 | location !~* .jPg$ { ... } |
3、location 优先级
- 首先精确匹配 =
- 其次前缀匹配 ^~
- 其次是按文件中顺序的正则匹配 ~或~*
- 然后匹配不带任何修饰的前缀匹配 abc
- 最后是交给 / 通用匹配 /
案例一:
location = /http://www.kgc.com/data {# 配置
}
location = /abc {# 配置
}
- location = /http://www.kgc.com/data它不匹配/data,因为location =/http://www.kgc.com/data=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配。
- 再比如 location = /abc,它只匹配/abc ;/abc/或 /abcd不匹配。若 location /abc,则即匹配/abc 或/abcd/ 同时也匹配。
案例二:
location / {# 配置
}
比如有以下三个地址:
- http://www.kgc.com/data
- http://www.kgc.com/data/abc
- /a/usr/local/nginx/html/data/abc
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配,/data 也匹配。但若后面是正则表达式会和最长字符串优先匹配(最长匹配)
案例三:
location /documents/ {# 配置
}
比如有以下一个地址:
- http://www.kgc.com/documents/abc
它匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location;只有其它 location后面的正则表达式没有匹配到时,才会采用这一条。
案例四:
location /documents/abc {# 配置
}
匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location;只有其它 location后面的正则表达式没有匹配到时,才会采用这一条。
案例五:
location ^~ /images/ {# 配置
}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
案例六:
location ~* \.(gif|jpg|jpeg)$ {# 配置
}
匹配所有以 gif、jpg或jpeg 结尾的请求,然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则。
案例七:
location /images/abc {# 配置
}
最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在。
案例八:
location ~ /images/abc {# 配置
}
匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条。
案例九:
location /images/abc/1.html {# 配置
}
location ~ /images/abc/1.html {# 配置
}
匹配/images/abc/1.html 文件,如果和正则location ~ /images/abc/1.html 相比,正则优先级更高
优先级总结:
(location = 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (location /)
location 匹配顺序:
- 首先看 优先级:精确>前缀>正则>一般>通用
- 优先级相同:正则看上下顺序,上面的优先;一般匹配看长度,最长匹配的优先
- 精确、前缀、正则、一般 都没有匹配到,最后再看通用匹配 一般匹配
三、Nginx 常见网站配置示例
在实际网站的 Nginx 配置中,通常至少会定义三个匹配规则,以实现高效的请求处理。这些规则包括首页的匹配规则、静态文件的处理规则,以及动态请求的转发规则。
3.1、网站根目录匹配规则
这个规则用于直接匹配网站的根目录(/),通常用于访问网站首页。因为通过域名访问网站首页的请求较为频繁,使用这个规则可以加速处理。首页可以是一个静态页面,也可以转发到后端应用服务器。
location = / {root html;index index.html index.htm;
}
解释:当请求 URI 为 / 时,Nginx 会寻找 html 目录下的 index.html 或 index.htm 作为首页响应。如果有必要,这个请求也可以被转发到后端服务器进行处理。
3.2、静态文件处理规则
Nginx 作为 HTTP 服务器,处理静态文件请求是其强项。可以通过目录匹配或后缀匹配来处理静态资源请求,任选其一或搭配使用。
目录匹配:匹配以 /static/ 开头的请求,将其映射到文件系统的 /webroot/static/ 目录。
location ^~ /static/ {root /webroot/static/;
}
后缀匹配:匹配特定后缀的请求,如 .html、.gif、.jpg 等,将这些请求映射到文件系统的 /webroot/res/ 目录。
location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}
解释:目录匹配主要用于静态资源的路径匹配,后缀匹配则用于对特定类型文件的请求匹配。根据实际需求,可以选择一种或两种方式组合使用。
3.3、动态请求转发规则
对于非静态文件的请求,通常会默认认为是动态请求,这类请求需要转发到后端应用服务器进行处理。例如,将带有 .php 或 .jsp 后缀的请求转发给 Tomcat 等后端服务器。
location / {proxy_pass http://tomcat_server;
}
解释:这个通用规则将所有未匹配到前面规则的请求(即大多数动态请求)转发到后端应用服务器 http://tomcat_server 进行处理。
四、Rewrite 案例
1、基于域名的跳转
在某些情况下,可能需要将旧域名的所有请求重定向到新域名,并且保持 URL 中的参数不变。以下是一个 Nginx 配置示例,用于将旧域名 www.kgc.com 的请求永久重定向到新域名。
编辑 Nginx 配置文件
vim /usr/local/nginx/conf/nginx.conf
设置 Nginx 服务器块
server {listen 80;server_name www.kgc.com; //旧域名charset utf-8;access_log /var/log/nginx/www.kgc.com-access.log; //设置访问日志location / {//添加域名重定向逻辑//if ($host = 'www.kgc.com') { //$host 变量表示请求的主机名rewrite ^/(.*)$ http://www.benet.com/$1 permanent; //将旧域名的请求重定向到新域名,保持参数不变}root html;index index.html index.htm;}
}
更新 /etc/hosts 文件
echo "172.16.88.22 www.kgc.com www.benet.com" >> /etc/hosts
重启 Nginx 服务并测试
systemctl reload nginx
在浏览器中访问旧域名,如 http://www.kgc.com/test/1.html,你将会看到页面自动跳转到 http://www.benet.com/test/1.html,并且浏览器的开发者工具中会显示返回的 301 状态码,表示实现了永久重定向。
2、基于客户端 IP 访问跳转
在某些情况下,可能需要根据客户端的 IP 地址来控制对网站的访问。例如,新的业务版本上线期间,所有的访问都需要跳转到维护页面,只有特定的公司 IP 地址可以正常访问网站。以下是 Nginx 的配置示例,用于实现这个需求。
首先,打开 Nginx 的主配置文件 nginx.conf 并进行编辑
vim /usr/local/nginx/conf/nginx.conf
在配置文件中,添加如下的 server 块配置,用于处理旧域名的请求并将其重定向到新域名。
server {listen 80;server_name www.kgc.com; //设置域名charset utf-8;access_log /var/log/nginx/www.kgc.com-access.log; //设置访问日志//设置 IP 访问控制变量set $rewrite true; //默认所有 IP 需要重定向到维护页面# 判断是否为合法 IP 地址if ($remote_addr = "172.16.88.22") { //如果客户端 IP 为 172.16.88.22set $rewrite false; //不进行重写,允许正常访问}//对于非法 IP 地址进行重写跳转if ($rewrite = true) { //如果变量 $rewrite 仍为 truerewrite (.+) /weihu.html; //重定向到维护页面}//配置维护页面的 locationlocation = /weihu.html {root /var/www/html; //设置维护页面文件所在目录}//配置正常访问的 locationlocation / {root html; //设置正常网站的根目录index index.html index.htm;}
}
在 /var/www/html/ 目录下创建一个简单的维护页面
mkdir -p /var/www/html/
echo "<h1>We are maintaining now!</h1>" > /var/www/html/weihu.html
重启 Nginx 服务并测试
systemctl restart nginx
- 访问网站时,只有 IP 为 172.16.88.22的用户 能够正常访问网站的内容。
- 其他所有 IP 的访问请求都会被重定向到
/weihu.html维护页面,并显示维护信息We are maintaining now!。
3、基于旧域名跳转到新域名后面加目录
当旧域名需要重定向到新域名的特定路径时,可以使用 Nginx 的 rewrite 指令进行配置。以下是如何将旧域名 http://bbs.kgc.com/post/ 下的所有请求跳转到新域名。
打开 Nginx 的主配置文件 nginx.conf 并进行编辑
vim /usr/local/nginx/conf/nginx.conf
在配置文件中,添加如下的 server 块配置,用于处理旧域名的重定向
server {listen 80;server_name bbs.kgc.com; //旧域名charset utf-8;access_log /var/log/nginx/www.kgc.com-access.log; //设置访问日志//设置旧域名下 /post 的重定向规则location /post {rewrite ^/post(.*)$ http://www.kgc.com/bbs/post$1 permanent; //进行永久重定向}//配置其他请求的处理location / {root html;index index.html index.htm;}
}
在新域名的对应路径下创建一个测试文件
mkdir -p /usr/local/nginx/html/bbs/post
echo "this is 1.html" > /usr/local/nginx/html/bbs/post/1.html
修改本地 hosts 文件,为了在本地测试,将旧域名映射到本地服务器的 IP 地址
echo "172.16.88.22 bbs.kgc.com" >> /etc/hosts
重启 Nginx 服务并测试
systemctl restart nginx
在浏览器中访问 http://bbs.kgc.com/post/1.html。你应该会被重定向到http://www.kgc.com/bbs/post/1.html。这表明重定向规则已经成功应用,并且旧域名的请求被正确地转发到了新域名下的相应路径。
4、基于参数匹配的跳转
在实际应用中,有时需要根据特定的 URL 参数模式将用户请求重定向到其他页面。下面是如何使用 Nginx 的 rewrite 指令实现这样的需求:将访问 http://www.kgc.com/100-(100|200)-100.html 的请求重定向到 http://www.kgc.com 首页。
打开 Nginx 的主配置文件 nginx.conf 并进行编辑:
vim /usr/local/nginx/conf/nginx.conf
在配置文件中,添加如下的 server 块配置,用于处理基于参数匹配的跳转:
server {listen 80;server_name www.kgc.com; //域名设置charset utf-8;access_log /var/log/nginx/www.kgc.com-access.log; //设置访问日志# 设置基于参数匹配的跳转规则if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {rewrite (.+) http://www.kgc.com permanent; //重定向到首页}# 配置其他请求的处理location / {root html;index index.html index.htm;}
}
$request_uri:表示包含请求参数的原始 URI,不包含主机名。if ($request_uri ~ ^/100-(100|200)-(\d+).html$):匹配 URL 中符合100-100-100.html或100-200-100.html模式的请求。rewrite (.+) http://www.kgc.com permanent;:将符合条件的请求永久重定向到http://www.kgc.com首页。
重启 Nginx 服务并测试
systemctl restart nginx
使用浏览器访问以下链接:
http://www.kgc.com/100-100-100.htmlhttp://www.kgc.com/100-200-100.html
两者均应被重定向到 http://www.kgc.com 首页,表明 Nginx 已成功匹配并重定向请求。
Nginx 相关变量解释
- $request_uri:包含原始请求 URI 和参数(如
/abc/bbs/index.html?a=1&b=2)。 - $uri:仅包含请求的路径部分,不包含参数(如
/abc/bbs/index.html)。 - $document_uri:与
$uri相同,表示当前请求的路径部分,不包含参数。
5、基于目录下所有 php 结尾的文件跳转
在某些情况下,可能需要将访问特定目录下所有以 .php 结尾的文件请求重定向到网站首页。以下是如何在 Nginx 中配置这类跳转的详细步骤。
首先,打开 Nginx 的主配置文件 nginx.conf 进行编辑:
vim /usr/local/nginx/conf/nginx.conf
在配置文件中,添加如下的 server 块,用于处理对特定目录下 .php 文件的重定向:
server {listen 80;server_name www.kgc.com; # 设置域名charset utf-8;access_log /var/log/nginx/www.kgc.com-access.log; # 设置访问日志# 配置对 /upload/ 目录下所有 .php 文件的跳转location ~* /upload/.*\.php$ {rewrite (.+) http://www.kgc.com permanent; # 将匹配的请求永久重定向到首页}# 配置其他请求的处理location / {root html;index index.html index.htm;}
}
location ~* /upload/.*\.php$:该行定义了对/upload/目录下所有以.php结尾的文件进行正则匹配,~*表示不区分大小写。rewrite (.+) http://www.kgc.com permanent;:将符合条件的请求永久重定向到http://www.kgc.com首页。
重启 Nginx 服务并测试重定向
systemctl restart nginx
使用浏览器访问以下链接:
http://www.kgc.com/upload/123.php
请求将被重定向到 http://www.kgc.com 首页,表明 Nginx 已成功匹配并重定向请求。
6、基于最普通一条 url 请求的跳转
在一些场景中,可能需要将访问特定页面的请求重定向到网站的首页。以下是如何在 Nginx 中配置这类 URL 请求跳转的详细步骤。
首先,打开 Nginx 的主配置文件 nginx.conf 进行编辑
vim /usr/local/nginx/conf/nginx.conf
在配置文件中,添加如下的 server 块,用于处理对特定 URL 的重定向:
server {listen 80;server_name www.kgc.com; //设置域名charset utf-8;access_log /var/log/nginx/www.kgc.com-access.log; //设置访问日志//配置对 /abc/123.html 页面请求的跳转location ~* ^/abc/123.html {rewrite (.+) http://www.kgc.com permanent; //将匹配的请求永久重定向到首页}//配置其他请求的处理location / {root html;index index.html index.htm;}
}
location ~* ^/abc/123.html:该行定义了对具体 URL/abc/123.html进行匹配,~*表示不区分大小写。rewrite (.+) http://www.kgc.com permanent;:将符合条件的请求永久重定向到http://www.kgc.com首页。
重启 Nginx 服务并测试重定向
systemctl restart nginx
使用浏览器访问以下链接:
http://www.kgc.com/abc/123.html
请求将被重定向到 http://www.kgc.com 首页,表明 Nginx 已成功匹配并重定向请求。
相关文章:
Nginx—Rewrite
目录 一、Nginx—Rewrite概述 1、常用的Nginx正则表达式 2、Rewrite功能 3、Rewrite跳转实现 4、Rewrite执行顺序和语法格式 二、location概述 1、location分类 2、location 常用的匹配规则 3、location 优先级 案例一: 案例二: 案例三&…...
《深入浅出WPF》读书笔记.5控件与布局(上)
《深入浅出WPF》读书笔记.5控件与布局(上) 背景 深入浅出WPF书籍学习笔记附代码。WPF中数据是核心是主动的,UI是数据的表达是被动的。 程序的本质是数据算法;控件的本质是数据行为; 5.控件与布局 一、6类控件派生关系 1.布局控件:可以容纳多个控件…...
二叉树的判断
二叉树的判断 判断一颗二叉树是不是搜索二叉树 (左边的比根小,右边的比根大) 中序遍历一下,如果是的话就一定是升序的 如何判断一颗二叉树是否是完全二叉树 1.遍历任意的节点时候,如果返回右孩子没有左孩子&#x…...
Hive3:常用的内置函数
1、查看函数列表 -- 查看所有可用函数 show functions; -- 查看count函数使用方式 describe function extended count;2、数学函数 -- round 取整,设置小数精度 select round(3.1415926); -- 取整(四舍五入) select round(3.1415926, 4); -- 设置小数精度4位(四…...
设计模式---构建者模式(Builder Pattern)
构建者模式(Builder Pattern) 是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离。它允许使用相同的构建过程创建不同的表示。该模式通常用于构建复杂对象,这些对象由多个部分组成或具有多个可选属性。 构建者模式的核…...
Pytorch中transform的应用
在PyTorch中,transforms模块主要用于对图像进行预处理和数据增强,以便于训练深度学习模型。这些转换操作可以包括裁剪、缩放、旋转、翻转等,以及对图像进行标准化处理。下面将详细介绍一些常用的transforms操作及其应用。 1. 常用的transfor…...
okular阅读软件简介
okular阅读软件官网:https://okular.kde.org/zh-cn/ Okular 是一款由 KDE 开发的跨平台文档阅读器,以其功能丰富、轻巧快速而著称。它支持多种文件格式,包括 PDF、EPub、DjVu、MD 文档,以及 JPEG、PNG、GIF、Tiff 和 WebP 图像&a…...
【书生大模型实战营(暑假场)闯关材料】基础岛:第1关 书生大模型全链路开源体系
【书生大模型实战营(暑假场)闯关材料】基础岛:第1关 书生大模型全链路开源体系 简介一、背景介绍1.1 背景介绍1.2 全链路开源开放体系的优势 二、全链路开源开放体系的主要特点2.1 模型组件的公开和共享2.2 数据集的公开和共享2.3 模型的互操…...
掌握抽象工厂模式:打造灵活且强大的跨平台产品族
抽象工厂模式是一种创建型设计模式,它的核心思想是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式通过使用抽象工厂来封装和隔离具体产品的创建过程,使得客户端可以通过工厂接口来创建一族产品,从…...
【Hadoop】建立圈内组件的宏观认识(大纲版)
Hadoop生态圈解析:各组件的主要功能及作用详解 Hadoop生态圈是由一系列开源组件组成的,这些组件共同构建了一个大规模分布式计算和存储平台。 01存储类型组件 HDFS Hadoop体系的核心组件之一,它是一个分布式文件系统,被设计用于存…...
NFS主从同步Rsync、sersync2
准备工作检查selinux 防火墙 #关闭 selinux sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/config #关闭防火墙 systemctl stop firewalld;systemctl disable firewalld1.安装nfs相关包 # 所有节点安装nfs相关包 yum install nfs-utils -y systemctl enable nfs-utils …...
uniapp项目中,在原有数据中增加选中的状态,数据不改变
uniapp项目中,在原有数据中增加选中的状态,选中后打印的数据显示有变化,然而文本的数据并没有发生变化 看代码 export default {data() {return {thicate: [{ id: 1, text: "Item 1" },{ id: 2, text: "Item 2" },{ id…...
WPF自定义控件
控件模板 顾名思义就是在原有的控件上进行模版修改成自己需要的样式 把ProgressBar修改为一个水液面的进度条 <Window x:Class"XH.CustomLesson.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://s…...
Java中的全局异常处理器 -- GlobalExceptionHandler
开发记录:全局异常处理器笔记 import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.MyBatisSystemException; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.RedisConnectionFailureException; im…...
R语言文本挖掘-万字详细解析tm包
tm包(Text Mining Package)是R语言中用于文本挖掘的强大工具包,它提供了一系列的功能来处理和分析文本数据。偶然看到这个包,我们一起看看其中的基本功能: 数据载入:tm包支持从多种数据源载入文本数据&…...
JWT中的Token
1.JWT是什么? jwt(json web token的缩写)是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以json对象安全地传输信息,此信息可以验证和信任,因…...
苹果在iOS 18.1中向第三方开发者开放iPhone的NFC芯片
苹果公司今天宣布,开发者很快就能首次在自己的应用程序中提供 NFC 交易功能,而目前这主要是Apple Pay独有的功能。从今年晚些时候的 iOS 18.1 开始,开发者将可以使用新的 API 提供独立于 Apple Pay 和 Apple Wallet 的应用内非接触式交易。 这…...
系统开发之禁止卸载应用名单
本文目的主要是记录自己系统(Android7.1系统)开发实现代码,以便后期通用的功能可以直接使用,不需要再去通过搜索然后筛选再验证的繁琐流程,大大减小自己的开发时间。 我实现思路是在系统内新增自己的数据库用来记录禁止…...
wait 和 notify
目录 wait() 方法 notify() 方法 notifyAll() 方法 nofity 和 notifyAll wait 和 notify wait 和 sleep 的区别 wait 和 join 的区别 由于线程之间是抢占式执行的,因此,线程之间执行的先后顺序难以预知,但是,在实际开发中&…...
docker 启动 mongo,redis,nacos.
docker run --name mymongodb -e MONGO_INITDB_ROOT_USERNAMEadmin -e MONGO_INITDB_ROOT_PASSWORDXiaoyusadsad -p 27017:27017 -v /path/to/mongo-data:/data/db -d mongodb/mongodb-community-server:4.4.18-ubuntu2004-v 的目录必须是绝对目录 目录必须 chmod 777 /path/…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
