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

Nginx--地址重写Rewrite

一、什么是Rewrite

Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程

URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.php?id=123 使用URLRewrite 转换后可以显示为 http://www.123.com/news/123.html对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。理论上,搜索引擎更喜欢静态页面形式的网页,搜索引擎对静态页面的评分一般要高于动态页面。所以,UrlRewrite可以让我们网站的网页更容易被搜索引擎所收录

从安全角度上讲,如果在URL中暴露太多的参数,无疑会造成一定量的信息泄漏,可能会被一些黑客利用,对你的系统造成一定的破坏,所以静态化的URL地址可以给我们带来更高的安全性

实现网站地址跳转,例如用户访问360buy.com,将其跳转到jd.com。例如当用户访问tianyun.com的80端口时,将其跳转到443端口。

二、Rewrite相关指令

Nginx Rewrite 相关指令有 ifrewrite、set、return

1、if语句

应用环境:serverlocation,其语法为:

 if (condition) {...}

if可以支持如下条件判断匹配符号

匹配符号说明
~正则匹配(区分大小写)
~*正则匹配(不区分大小写
!~正则不匹配(区分大小写)
!~*正则不匹配(不区分大小写)
-f 和 !-f用来判断是否存在文件
-d 和 !-d用来判断是否存在目录
-e 和 !-e用来判断是否存在文件或目录
-x 和 !-x用来判断文件是否可以执行在

在匹配过程中可以引用一些Nginx的全局变量

全局变量说明
$args请求中的参数
$document_root针对当前请求的根路径设置值
$host请求信息中的"hsot",如果请求中没有host行,则等于设置的服务器名
$limit_rate对连接速率的限制
$request_method请求的方法,比如"GET"、"POST"等
$remote_addr客户端地址
$remote_port客户端端口号
$remote_user客户端用户名,认证用
$request_filename当前请求的文件路径名(带网站的主目录/usr/local/nginx/html/images /a.jpg)
$request_uri当前请求的文件路径名(不带网站的主目录/images/a.jpg)
$query_string与$args相同
$scheme用的协议,比如http或者是https
$server_protocol请求的协议版本,"HTTP/1.0"或"HTTP/1.1"
$server_addr服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
$server_name请求到达的服务器名
$document_uri与$uri一样,URI地址
$server_port请求到达的服务器端口号

2、Rewrite flag

rewrite 指令根据表达式来重定向URI,或者修改字符串。可以应用于server,location, if环境下每行rewrite指令最后跟一个flag标记,支持的flag标记有

标记说明
last相当于Apache里的[L]标记,表示完成rewrite。默认为last。
break本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent返回301永久重定向,浏览器地址会显示跳转后URL地址

redirect 和 permanent区别则是返回的不同方式的重定向,对于客户端来说一般状态下是没有区别的。而对于搜索引擎,相对来说301的重定向更加友好,如果我们把一个地址采用301跳转方式跳转的话,搜索引擎会把老地址的相关信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地址。使用302重定向时,搜索引擎(特别是google)有时会查看跳转前后哪个网址更直观,然后决定 显示哪个,如果它觉的跳转前的URL更好的话,也许地址栏不会更改,那么很有可能出现URL劫持的现像。在做URI重写时,有时会发现URI中含有相关参数,如果需要将这些参数保存下来,并且在重写过程中重新引用,可以用到 () 和 $N 的方式来解决。

3、Rewrite实验

3.1、环境准备

主机名IP地址说明
centos10.0.0.2nginx服务器

本地解析host文件(windows)

 10.0.0.2    www.testpm.com

3.2、Rewrite匹配

1>、Rewrite匹配参考示例
 [root@centos ~]# mkdir /html | cd /html/[root@centos html]# mkdir a [root@centos html]# echo 1.html > a/1.html[root@centos html]# echo 2.html > b/2.html[root@centos html]# vim /etc/nginx/conf.d/default.conf server {listen 80;server_name www.testpm.com; location /a {       # 匹配以/a开头的请求路径root /html; # 根目录index 1.html index.htm; # 默认的首页文件rewrite .* /b/2.html permanent; # 将所有匹配/a的请求重定向到/b/2.html}location /b {root /html;index 2.html index.htm;}}[root@centos html]# nginx -s reload
2>、浏览器访问

当我们在浏览器输入a/1.html,由于设置了地址重写:发现地址跳转;

3.3、Rewrite其他配置

1>、示例1

当用户访问www.testpm.com/2019/a或其子路径时,Nginx将请求重定向到www.testpm.com/2018/a或相应的子路径,并且这个重定向是永久的

 [root@centos html]# pwd/var/www/html[root@centos html]# ls2018  2019[root@centos html]# cat 2018/a/1.html 2018[root@centos html]# cat 2019/a/1.html 2019[root@centos html]# vim /etc/nginx/conf.d/default.conf server {listen 80;server_name www.testpm.com;location /2019/a          # 匹配以/2019/a开头的请求路径root /var/www/html;     index 1.html index.htm;rewrite ^/2019/(.*) /2018/$1 permanent; # 以/2019/a开头的请求重定向到以/2018/a开头的路径,$1是正则表达式中的捕获组,用来替换重定向路径中的相应部分}location /2018/a {root /var/www/html;index 1.html index.htm;}}[root@centos html]# nginx -s reload
2>、示例2

当用户访问www.testpm.com/a或其子路径时,他们将被永久重定向到京东的主页面。这可以用于网站的重构、域名变更或其他需要重定向的场景

http://www.testpm.com/a/1.html => http://jd.com

 [root@centos html]# cat /etc/nginx/conf.d/default.conf server {listen 80;server_name www.testpm.com;location /a {root /html;# 请求的主机名匹配testpm.com(不区分大小写),则执行大括号内的rewrite规则if ($host ~* testpm.com) {      rewrite .* http://jd.com permanent;   # 以/a开头的请求重定向到http://jd.com}}}[root@centos html]# nginx -s reload
3>、示例3

将来自testpm.com域名下的请求重定向到京东的相应页面

http://www.testpm.com/a/1.html => http://jd.com/a/1.html

 location /a {root /html;if ($host ~* testpm.com) {# 将请求重定向到http://jd.com,后面紧跟着原始请求的URI(由$request_uri变量提供)rewrite .* http://jd.com$request_uri permanent;}}
4>、示例4

在访问目录后添加/ (如果目录后已有/,则不加/)

http://www.testpm.com/a/b/cexample => http://www.testpm.com/a/b/cexample/

[root@centos c]# pwd
/usr/share/nginx/html/a/b/c
[root@centos c]# cat index.html
111
[root@centos c]# vim /etc/nginx/conf.d/default.conf 
server {listen 80;server_name www.testpm.com;location /a/b/c {		# 处理以/a/b/c开头的请求root /usr/share/nginx/html;index index.html index.hml;if (-d $request_filename) {# 如果用户请求的是一个目录而不是文件,并且请求的URL没有以斜杠结尾,Nginx会自动将请求重定向到以斜杠结尾的URL,从而避免潜在的SEO问题或不一致的链接问题rewrite ^(.*)([^/])$ http://$host$1$2/ permanent;	}}
}
[root@centos c]# nginx -t | nginx -s reload

rewrite规则详解

  • ^(.*)([^/])$:匹配任何以非斜杠字符结尾的路径。第一个捕获组(.*)匹配路径中的任意字符,第二个捕获组([^/])确保路径不是以斜杠结尾。
  • http://$host$1$2/:重定向的URL,其中$host是原始请求的主机名,$1是第一个捕获组匹配的内容,$2是第二个捕获组匹配的单个字符,最后附加一个斜杠/
  • permanent:指定这是一个301永久重定向,通知浏览器和搜索引擎该资源已经永久移动到新的URL。
5>、示例5

当用户访问类似http://www.testpm.com/login/someuser.html的URL时,Nginx会重写URL并重定向到http://www.testpm.com/reg/login.html?user=someuser。、

# http://www.tianyun.com/login/tianyun.html ==>http://www.tianyun.com/reg/login.html?user=tianyun

[root@centos html]# pwd
/usr/share/nginx/html
[root@centos html]# ls
50x.html index.html index.html.bak1 reg
[root@centos html]# cat reg/login.html
login
[root@centos c]# vim /etc/nginx/conf.d/default.conf 
location /login {root /usr/share/nginx/html;# 以/login/开头并以.html结尾的请求路径,请求重定向到/reg路径下的login.html页面,并带上一个查询参数user,其值为第一个捕获组(.*)匹配到的内容rewrite ^/login/(.*)\.html$ http://$host/reg/login.html?user=$1;}
location /reg {root /usr/share/nginx/html;index login.html;
}
6>、示例6

当用户访问类似http://www.example.com/qf/123-456-789的URL时,Nginx会将请求重写并重定向到http://www.example.com/qf/123/456/789

http://www.tianyun.com/qf/11-22-33/1.html ==> http://www.tianyun.com/qf/11/22/33/1.html

location /qf {# 匹配以/qf/开头,后跟三个由连字符-分隔的数字序列,再可能跟有任意字符(表示路径或查询字符串)的请求路径rewrite ^/qf/([0-9]+)-([0-9]+)-([0-9]+)(.*)$ /qf/$1/$2/$3$4permanent;
}
location /qf/11/22/33 {root /html;index 1.html;
}

4、set命令

set 指令是用于定义一个变量,并且赋值;应用环境:server、location、if

4.1、实验:DNS实现泛解析

无论用户访问哪个以 .testpm.com 结尾的子域名,DNS都会返回 10.0.0.2 这个IP地址。然后,服务器将根据请求的子域名来决定如何响应请求;

(1)页面基本配置

[root@centos html]# pwd
/usr/share/nginx/html
[root@centos html]# mkdir jack alice
[root@centos html]# echo "jack.." >> jack/index.html
[root@centos html]# echo "alice.." >> alice/index.html

(2)nginx服务配置

[root@centos html]# vim /etc/nginx/conf.d/default.conf 
server {listen 80;server_name www.testpm.com;location / {root /usr/share/nginx/html;index index.html index.htm;# 如果请求的域名为www.testpm.com,则不执行后续的if或rewrite指令    if ( $host ~* ^www.testpm.com$) {	break;}if ( $host ~* "^(.*)\.testpm\.com$" ) {set $user $1;		# 将匹配到的子域名部分存储到变量$user中rewrite .* http://www.testpm.com/$user permanent;	# 重写URL,将请求重定向到http://www.testpm.com/后面跟上变量$user的值}}location /jack {					# 对/jack路径的请求的处理规则root /usr/share/nginx/html;index index.html index.htm;}location /alice {					# # 对/alice路径的请求的处理规则root /usr/share/nginx/html;index index.html index.htm;}
}
[root@centos html]# nginx -t | nginx -s reload

(3)客户端配置路由映射

10.0.0.2   www.testpm.com
10.0.0.2   alice.testpm.com
10.0.0.2   jack.testpm.com

(4)测试

5、return指令

return 指令用于返回状态码给客户端;应用于server、location、if中;

5.1、实验1

访问的.sh结尾的文件则返回403操作拒绝错误

(1)关键配置

server {listen 80;server_name www.testpm.cn;#access_log /var/log/nginx/http_access.log main;location / {root /usr/share/nginx/html;index index.html index.htm;}location ~* \.sh$ {return 403;		# 若以.sh结尾则返回403错误}
}

(2)测试访问

5.2、实验2

将80端口的访问重写到443端口

(1)关键配置

server {listen 80;server_name www.testpm.cn;access_log /var/log/nginx/http_access.log main;return 301 https://www.testpm.cn$request_uri;
}
server {listen 443 ssl;server_name www.testpm.cn;access_log /var/log/nginx/https_access.log main;#ssl on;ssl_certificate /etc/nginx/cert/2447549_www.testpm.cn.pem;ssl_certificate_key /etc/nginx/cert/2447549_www.testpm.cn.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;ssl_prefer_server_ciphers on;location / {root /usr/share/nginx/html;index index.html index.htm;}
}

(2)测试

[root@nginx-server ~]# curl -I http://www.testpm.cn
HTTP/1.1 301 Moved Permanently
Server: nginx/1.16.0
Date: Wed, 03 Jul 2019 13:52:30 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://www.testpm.cn/

三、last、break详解

1、使用方法

  • last 标记在本条 rewrite 规则执行完后,会对其所在的 server { … } 标签重新发起请求;
  • break 标记则在本条规则匹配完成后,停止匹配,不再做后续的匹配
  • 使用 alias 指令时,必须使用 last
  • 使用 proxy_pass 指令时,则必须使用break

2、实验演示

[root@centos html]# mkdir test
[root@centos html]# echo "last" > test/last.html
[root@centos html]# echo "break" > test/break.html
[root@centos html]# echo "test" > test/test.html
server {listen 80;server_name localhost;access_log /var/log/nginx/last.access.log main;location / {root /usr/share/nginx/html;index index.html index.htm;}location /break/ {root /usr/share/nginx/html;rewrite .* /test/break.html break;}location /last/ {root /usr/share/nginx/html;rewrite .* /test/last.html last;}location /test/ {root /usr/share/nginx/html;rewrite .* /test/test.html break;}
}
[root@centos html]# nginx -t | nginx -s reload

当last时: Nginx 将重写请求到 /test/last.html,然后由于 last 标志的使用,不会进一步重写,而是提供 /test/test.html 页面的内容

四、Nginx的https(rewrite)

server {listen 80;server_name *.vip9999.top vip9999.top;	# 处理域名if ($host ~* "^www.vip9999.top$|^vip9999.top$" ) {return 301 https://www.vip9999.top$request_uri;}	# 判断请求的 $host(主机头)是否精确匹配 www.vip9999.top 或 vip9999.top。如果是,使用 301 永久重定向到 https://www.vip9999.top,并保留原始请求的 URI($request_uri)。if ($host ~* "^(.*).vip9999.top$" ) {set $user $1;return 301 https://www.vip9999.top/$user;}
}# Settings for a TLS enabled server.
server {listen 443 ssl;server_name www.vip9999.top;location / {root /usr/share/nginx/html;index index.php index.html;}#pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000location ~ \.php$ {root /usr/share/nginx/html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;include fastcgi_params;}ssl on;		# 启用 SSL 加密ssl_certificate cert/214025315060640.pem;	# 指定 SSL 证书ssl_certificate_key cert/214025315060640.key;		# 私钥文件ssl_session_cache shared:SSL:1m;		# 会话缓存ssl_session_timeout 10m;				# 超时时间ssl_ciphers HIGH:!aNULL:!MD5;			# 加密套件ssl_prefer_server_ciphers on;
}

五、Apache的https(rewrite)

[root@centos html]# yum -y install httpd mod_ssl
[root@centos html]# vim /etc/httpd/conf.d/vip9999.conf

相关文章:

Nginx--地址重写Rewrite

一、什么是Rewrite Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程 URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.php?id123 使用U…...

webflux源码解析(1)-主流程

目录 1.关键实例的创建1.1 实例创建1.2 初始化 2.处理请求的关键流程2.1 从ReactorHttpHandlerAdapter开始2.1 DispatcherHandler的初始化2.2查找mapping handler2.3 处理请求(执行handler)2.4 返回结果处理 3.webflux的配置装配参考: WebFlux是Spring 5.0框架推出的…...

ipad作为扩展屏的最简单方式

将iPad用作扩展屏幕有几种简单而有效的方法。以下是几种常见的方式: 1. Sidecar(苹果官方功能) 适用设备:iPad和Mac(macOS Catalina及以上版本)。功能:Sidecar 是苹果官方的功能,可…...

【卡码网Python基础课 17.判断集合成员】

目录 题目描述与分析一、集合二、集合的常用方法三、代码编写 题目描述与分析 题目描述: 请你编写一个程序,判断给定的整数 n 是否存在于给定的集合中。 输入描述: 有多组测试数据,第一行有一个整数 k,代表有 k 组测…...

生物研究新范式!AI语言模型在生物研究中的应用

–https://doi.org/10.1038/s41592-024-02354-y 留意更多内容,欢迎关注微信公众号:组学之心 Language models for biological research: a primer 研究团队及研究单位 James Zou–Department of Biomedical Data Science, Stanford University, Stan…...

python语言day08 属性装饰器和property函数 异常关键字 约束

属性装饰器: 三个装饰器实现对私有化属性_creat_time的get,set,del方法; 三个装饰器下的方法名都一样,通过message.creat_time的不同操作实现调用get,set,del方法。 __inti__: 创建并…...

day01JS-数据类型-01

1. 浏览器内核 通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)…...

MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74)

专栏往期文章,包含本章 MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 手动实现一种基于高度覆盖值的建筑物点云提取方法,适用于高大的城市建筑物,比只利用高度提取建筑物的方法更加稳定和具有价值,主要…...

git的下载与安装(Windows)

Git是一个开源的分布式版本控制系统(Distributed Version Control System,简称DVCS),它以其高效、灵活和强大的功能,在现代软件开发中扮演着至关重要的角色。 git官网:Git (git-scm.com) 1.进入git官网 2…...

腾讯云AI代码助手 —— 编程新体验,智能编码新纪元

阅读导航 引言一、开发环境介绍1. 支持的编程语言2. 支持的集成开发环境(IDE) 二、腾讯云AI代码助手使用实例1. 开发环境配置2. 代码补全功能使用💻自动生成单句代码💻自动生成整个代码块 3. 技术对话3. 规范/修复错误代码4. 智能…...

使用 ESP32 和 TFT 屏幕显示实时天气信息 —— 基于 OpenWeatherMap API

实时监测环境数据是一个非常常见的应用场景,例如气象站、智能家居等。这篇博客将带你使用 ESP32 微控制器和一个 TFT 屏幕,实时显示当前城市的天气信息。通过 OpenWeatherMap API,我们能够获取诸如温度、天气情况以及经纬度等详细的天气数据&…...

高阶数据结构——B树

1. 常见的搜索结构 以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景。如果数据量很大,比如有100G数据,无法一次放进内存中,那就只能放在磁盘上了,如果放在磁盘上&#xff0…...

Vue2中watch与Vue3中watch对比和踩坑

上一节说到了 computed计算属性对比 ,虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时&#…...

在Java程序中执行Linux命令

在Java中执行Linux命令通常涉及到使用Java的运行时类 (java.lang.Runtime) 或者 ProcessBuilder 类来启动一个外部进程 1. 使用 Runtime.exec() Runtime.exec() 方法可以用来执行一个外部程序。它返回一个 Process 对象,可以通过这个对象与外部程序交互&#xff0…...

微信小程序在不同移动设备上的差异导致原因

在写小程序的时候用了rpx自适应单位,但是还是出现了在不同机型上布局不统一的问题,在此记录一下在首页做一个输入框,在测试的时候,这个输入框在不同的机型上到处跑,后来排查了很久都不知道为什么会这样 解决办法是后 …...

快速体验fastllm安装部署并支持AMD ROCm推理加速

序言 fastllm是纯c实现,无第三方依赖的高性能大模型推理库。 本文以国产海光DCU为例,在AMD ROCm平台下编译部署fastllm以实现LLMs模型推理加速。 测试平台:曙光超算互联网平台SCNet GPU/DCU:异构加速卡AI 显存64GB PCIE&#…...

报错:java: javacTask: 源发行版 8 需要目标发行版 1.8

程序报错: Executing pre-compile tasks... Loading Ant configuration... Running Ant tasks... Running before tasks Checking sources Copying resources... [gulimail-coupon] Copying resources... [gulimail-common] Parsing java… [gulimail-common] java…...

【数据结构篇】~单链表(附源码)

【数据结构篇】~链表 链表前言链表的实现1.头文件2.源文件 链表前言 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 1、链式机构在逻辑上是连续的,在物理结构上不一定连续​ 2、结点一般是从…...

旋转图像(LeetCode)

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 解题 def rotate(matrix):n len(matrix)# 矩阵转置for i in range(n):for…...

入门 - vue中v-model的实现原理和完整用法详解

v-model介绍 v-model是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值。在view层,model层相互需要数据交互,即可使用v-model。 双向绑…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...