Nginx 正则表达式与rewrite
目录
一、正则表达式
二、rewrite
2.1 rewrite简述
2.2 rewrite 跳转
2.3 rewrite 执行顺序
2.4 rewrite 语法格式
三、location
3.1 location 类别
3.2 location常用匹配规则
3.3 location优先级
3.4 示例说明
3.5 匹配规则总结
3.6 三个匹配规则定义
四、实战案例
4.1 基于域名的跳转
4.2 基于客户端 IP 访问跳转
4.3 基于旧域名跳转到新域名后面加目录
4.4 基于参数匹配的跳转
4.5 基于目录下所有 php 结尾的文件跳转
4.6 基于一条最普通url请求的跳转
一、正则表达式
常用的正则表达式
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” |
+ | 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o” |
? | 匹配前面的字符零次或一次,例如“od(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}” |
. | 匹配除“\n”之外的任何单个字符, 若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式 |
\ | 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$” |
\d | 匹配纯数字 |
{n} | 重复 n 次 |
{n,} | 重复 n 次或更多次 |
{n,m} | 重复 n 到 m 次 |
[] | 定义匹配的字符范围 |
[c] | 匹配单个字符 c |
[a-z] | 匹配 a-z 小写字母的任意一个 |
[a-zA-Z0-9] | 匹配所有大小写字母或数字 |
() | 表达式的开始和结束位置 |
| | 或运算符 |
二、rewrite
注:
rewrite与location主要区别:
rewrite 是在同一域名内更改获取资源的路径
location 是对一类路径做控制访问或反向代理,还可以 proxy_pass 到其他机器
2.1 rewrite简述
- rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
- 比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。
- rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,
- 例如:http://www.kgc.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写
2.2 rewrite 跳转
跳转的场景
- 调整用户浏览的URL,看起来更规范,呵护开发及产品人员的需求
- 为了让搜索引擎搜寻网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务
- 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com。
- 服务端某些业务调整,比如根据特殊变量、目录、客户端的信息进行URL调整等
跳转的实现
- Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
- 跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
- PCRE支持:perl兼容正则表达式的语法规则匹配
- 重写模块 set 指令:创建新的变量并设其值
2.3 rewrite 执行顺序
- 执行server块里面的rewrite指令
- 执行location匹配
- 执行选定的location中的rewrite指令
2.4 rewrite 语法格式
语法格式:rewrite <regex> <replacement> [flag];
regex :表示正则匹配规则
replacement :表示跳转后的内容
flag :表示 rewrite 支持的 flag 标记
flag标记说明 | |
last | 本条规则匹配完成后,继续向下匹配新的location URL规则,一般用在 server 和 if 中 |
break | 本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在 location 中 |
redirect | 返回302临时重定向,浏览器地址会显示跳转后的URL地址 |
permanent | 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址 |
注:
- last – 基本上都用这个Flag
- break – 中止Rewirte,不在继续匹配
- redirect – 返回临时重定向的HTTP状态302
- permanent – 返回永久重定向的HTTP状态301
last和break最大的不同在于
- break 是终止当前location的rewrite检测,而且不再进行location匹配
- last是终止当前location的rewrite检测,但会继续重试location匹配并处理区块中的rewrite规则
可用作判断的全局变量
$args #这个变量等于请求行中的参数。
$content_length # 请求头中的Content-length字段。
$content_type # 请求头中的Content-Type字段。
$document_root # 当前请求在root指令中指定的值。
$host # 请求主机头字段,否则为服务器名称。
$http_user_agent # 客户端agent信息
$http_cookie # 客户端cookie信息
$limit_rate # 这个变量可以限制连接速率。
$request_body_file # 客户端请求主体信息的临时文件名。
$request_method # 客户端请求的动作,通常为GET或POST。
$remote_addr # 客户端的IP地址。
$remote_port # 客户端的端口。
$remote_user # 已经经过Auth Basic Module验证的用户名。
$request_filename # 当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string # 与$args相同。
$scheme #HTTP 方法(如http,https)。
$server_protocol # 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr # 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name # 服务器名称。
$server_port # 请求到达服务器的端口号。
$request_uri # 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri # 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri # 与$uri相同。
例:http://localhost:88/test1/test2/test.php
$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:D:\nginx/html
$request_filename:D:\nginx/html/test1/test2/test.php
三、location
3.1 location 类别
location 大致可以分为三类:
精准匹配 | location = / {...} |
一般匹配 | location / {...} |
正则匹配 | location ~ / {...} |
3.2 location常用匹配规则
= | 进行普通字符精确匹配,也就是完全匹配 location = yudh www.kgc.com/yudh |
^~ | 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location |
~ | 区分大小写的匹配。 location ~ \.jpg$ {} jpg |
~* | 不区分大小写的匹配。 location ~ \.jPg$ {} jpg |
!~ | 区分大小写的匹配取非 |
!~* | 不区分大小写的匹配取非 |
3.3 location优先级
①首先精确匹配 =
②其次前缀匹配 ^~
③其次是按文件中顺序的正则匹配 ~或~*
④然后匹配不带任何修饰的前缀匹配 abc
⑤最后是交给 / 通用匹配
3.4 示例说明
(1)location = / http://www.kgc.com/ 他不会匹配/data http://www.kgc.com/data
=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。若 location /abc,则即匹配/abc 、/abcd/ 同时也匹配 /abc/。(2)location / {} http://www.kgc.com/data http://www.kgc.com/data/abc /a/usr/local/nginx/html/data/abc
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,
但若后面是正则表达式会和最长字符串优先匹配(最长匹配)(3)location /documents/ {} http://www.kgc.com/documents/abc
匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条(4)location /documents/abc {} www.baidu.com/
匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条(5)location ^~ /images/ {}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条http://www.kgc.com/documents/abc/testlocation /documents/abc/test/ {}
location ^~ /documents/ {}
location ~* /documents/ {}
location ^~ /documents/abc {} (6)location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 结尾的请求
然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则(7)location /images/abc {}
最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在location /documents/ {}
location /documents/abc/ {}
location /documents/abc/test/ {}(8)location ~ /images/abc {}
匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条(9)location /images/abc/1.html {} location /images/abc/test
匹配/images/abc/1.html 文件,如果和正则location ~ /images/abc/1.html 相比,正则优先级更高
3.5 匹配规则总结
首先看 优先级:精确>前缀>正则>一般>通用
优先级相同:正则看上下顺序,上面的优先;一般匹配看长度,最长匹配的优先
精确、前缀、正则、一般 都没有匹配到,最后再看通用匹配 一般匹配
3.6 三个匹配规则定义
实际网站使用中,至少有三个匹配规则定义
1、第一个必选规则
直接匹配网站根,通过域名访问网站首页比较频繁,使网。
可以是一个静态首页,也可以直接转发给后端应用服务器用这个会加速处理,比如说官
location = / {root html;index index.html index.htm;
}
2、第二个必选规则
处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {root /webroot/static/;
}/static/location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}
3、第三个必选规则
通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器
非静态文件请求就默认是动态请求
location / {proxy_pass http://tomcat_server;
}
四、实战案例
4.1 基于域名的跳转
公司旧域名www.ljm.com有业务需求变更,需要使用新域名www.lucien.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.ljm.com; #域名修改 charset utf-8;access_log /var/log/nginx/www.ljm.com.access.log; #日志修改location / {#添加域名重定向if ($host = 'www.ljm.com'){#$host为rewrite全局变量,代表请求主机头字段或主机名rewrite ^/(.*)$ http://www.lucien.com/$1 permanent;#$1为正则匹配的内容,即域名后边的字符串}root html;index index.html index.htm;}
}
浏览器输入模拟访问 http://www.lic.com/test/1.html
会跳转到www.kiki.com/test/1.html,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转
4.2 基于客户端 IP 访问跳转
公司业务新版本上线,要求所有 IP 访问都显示一个固定维护页面
只有公司 IP :192.168.184.80访问正常
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.ljm.com; #域名修改 charset utf-8;access_log /var/log/nginx/www.ljm.com-access.log main; #日志修改#设置是否合法的IP标记set $rewrite true; #设置变量$rewrite,变量值为boole值true#判断是否为合法IPif ($remote_addr = "192.168.184.60"){#当客户端IP为192.168.184.10时,将变量值设为false,不进行重写set $rewrite false;}#除了合法IP,其它都是非法IP,进行重写跳转维护页面if ($rewrite = true){ #当变量值为true时,进行重写rewrite (.+) /weihu.html; #重写在访问IP后边插入/weihu.html}location = /weihu.html {root /var/www/html; #网页返回/var/www/html/weihu.html的内容}location / {root html;index index.html index.htm;}
}
mkdir -p /var/www/html/
echo 'hello weihu!' > /var/www/html/weihu.html
systemctl restart nginx
浏览器访问
只有 IP 为 192.168.184.10 能正常访问,其它地址都是维护页面
4.3 基于旧域名跳转到新域名后面加目录
我们访问 http://www.ljm.com,现在需要将这个域名下面的访问都跳转到http://www.lucien.com/lucien
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.ljm.com; #域名修改 charset utf-8;access_log /var/log/nginx/ljm.com-access.log;#添加location /post {rewrite (.+) http://www.lucien.com/lucien$1 permanent; #这里的$1为位置变量,代表/post}location / {root html;index index.html index.htm;}
}
4.4 基于参数匹配的跳转
现在访问http://www.kgc.com/100-(100|200)-100.html 跳转到http://www.kgc.com页面
vim /usr/local/nginx/conf/nginx.conf
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;}
}
systemctl restart nginx
使用浏览器访问http://www.kgc.com/100-200-100.html 或 http://www.kgc.com/100-100-100.html 跳转到http://www.kgc.com页面
4.5 基于目录下所有 php 结尾的文件跳转
要求访问 http://www.kgc.com/upload/123.php 跳转到首页
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.kgc.com; #域名修改 charset utf-8;access_log /var/log/nginx/www.kgc.com-access.log;location ~* /upload/.*\.php$ {rewrite (.+) http://www.kgc.com permanent;}location / {root html;index index.html index.htm;}
}systemctl restart nginx
或
systemctl reload nginx浏览器访问 http://www.kgc.com/upload/123.php 跳转到http://www.kgc.com页面
4.6 基于一条最普通url请求的跳转
要求访问一个具体的页面如 http://www.kgc.com/abc/123.html 跳转到首页
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.kgc.com; #域名修改 charset utf-8;access_log /var/log/nginx/www.kgc.com-access.log;location ~* ^/abc/123.html {rewrite (.+) http://www.kgc.com permanent;}location / {root html;index index.html index.htm;}
}systemctl restart nginx
浏览器访问 http://www.kgc.com/abc/123.html 跳转到http://www.kgc.com页面
相关文章:

Nginx 正则表达式与rewrite
目录 一、正则表达式 二、rewrite 2.1 rewrite简述 2.2 rewrite 跳转 2.3 rewrite 执行顺序 2.4 rewrite 语法格式 三、location 3.1 location 类别 3.2 location常用匹配规则 3.3 location优先级 3.4 示例说明 3.5 匹配规则总结 3.6 三个匹配规则定义 四、实战…...

tekton什么情况下在Dockerfile中需要用copy
kaniko配置如下 如果docker中的workDir跟tekton中的workDir不一致需要copy。也可以通过mv,cp达到类似效果...

第九届世界渲染大赛在哪里提交作品呢?
自第九届世界渲染大赛开放投稿以来,已经过去了10天。在这段时间里,众多CG爱好者已经完成了他们的动画创作。然而,许多参赛者对于如何提交他们的作品仍然感到困惑。接下来,让我们一起了解具体的投稿流程和入口,确保每位…...

fastjson(autoType)反序列化漏洞
1. 温少和他的fastjson 阿里巴巴的 FastJSON,也被称为 Alibaba FastJSON 或阿里巴巴 JSON,是一个高性能的 Java JSON 处理库,用于在 Java 应用程序中解析和生成 JSON 数据。FastJSON 以其卓越的性能和功能丰富的特点而闻名,并在…...

Java入门基础16:集合框架1(Collection集合体系、List、Set)
集合体系结构 Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。 collection集合体系 Collection的常用方法 package com.itchinajie.d1_collection;import java.util.ArrayList; import java.util.HashSet;/* * 目…...
Qt如何调用接口
在Qt中,你可以使用QNetworkAccessManager类来调用API。以下是一个简单的示例: cpp #include <QCoreApplication> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> int main(int arg…...

Android14之解决编译libaaudio.so报错问题(二百二十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…...

【专题】2024年7月人工智能AI行业报告合集汇总PDF分享(附原数据表)
原文链接:https://tecdat.cn/?p37350 随着人工智能技术的飞速发展,AI已经成为当今时代的重要驱动力。本报告将聚焦于人工智能AI行业的最新动态,涵盖客户服务、体验营销、资产管理以及国产AI大模型应用等多个领域。通过深入研究和分析,我们…...

干货分享|如何使用Stable Diffusion打造会说话的数字人?
数字人已不是什么新鲜名词了。在许多领域,尤其是媒体和娱乐领域,经常可以看到卡通形象的人物或逼真的虚拟主持人。在Stable Diffusion中,我们可以上传一段录制好的音频文件,然后使用SadTalker插件,将音频和图片相结合&…...

OrangePi AIpro学习4 —— 昇腾AI模型推理 C++版
目录 一、ATC模型转换 1.1 模型 1.2 ATC工具 1.3 实操模型转换 1.4 使用ATC工具时的一些关键注意事项 1.5 ATC模型转换命令举例 二、运行昇腾AI模型应用样仓程序 2.1 程序目录 2.2 下载模型和模型转换 2.3 下载图片和编译程序 2.4 解决报错 2.5 运行程序 三、运行…...
vue js 多组件异步请求解决方案
接口之间异步问题可以采用Promiseasyncawait 链接: https://blog.csdn.net/qq_39816586/article/details/103517416 使用场景: 1.保障用户必须完成自动登录,才调用后续逻辑 2.保障必须完成初始启动,才调用后续逻辑 3.保障先执行on…...

【Android】不同系统版本获取设备MAC地址
【Android】不同系统版本获取设备MAC地址 尝试实现 尝试 在开发过程中,想要获取MAC地址,最开始想到的就是WifiManager,但结果始终返回02:00:00:00:00:00,由于用得是wifi ,考虑是不是因为用得网线的原因,但…...
残差网络--NLP上的应用
在自然语言处理(NLP)领域,残差网络(ResNet)同样有着广泛的应用。虽然最初的残差网络设计是为了处理图像任务,但其核心思想也被成功地迁移到了自然语言处理任务中,以解决深层神经网络中的退化问题…...
1章4节:数据可视化, R 语言的静态绘图和 Shiny 的交互可视化演示(更新2024/08/14)
在数据科学的世界中,“一图胜千言”的古老谚语依然适用。数据可视化不仅仅是将数据以图形化的方式展现,更是帮助我们发现数据背后隐藏模式、趋势和异常的强大工具。R语言作为数据科学的主要编程语言之一,以其强大的可视化能力而闻名,许多数据科学家和分析师因此选择了R作为…...
浅谈个人用户如何玩转HTTP代理
今天,准备和大家聊聊我是如何玩转HTTP代理的,希望能给大家带来一些启发和帮助。 犹记得刚开始接触HTTP代理时,我对它还是一无所知。那时我总被各种网络限制所困扰,无法随心所欲地访问我想看的网站。直到HTTP代理的出现,…...

动手研发实时口译系统
重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

C#(asp.net)电商后台管理系统-计算机毕业设计源码70015
摘 要 随着互联网技术的不断发展,电商行业也越来越受到人们的关注。为了提高电商行业的管理效率和服务水平,本文提出了一种基于ASP.NET电商后台管理系统的设计与实现方案。 电商管理系统基于VisualStudio开发平台,采用C#编程语言和ASP.NET等技…...

Unity 中创建动画的教程
Unity 动画创建教程 在游戏开发中,生动的动画能够极大地提升玩家的体验。在这篇教程中,我们将一起探索如何在 Unity 中创建动画。 一、准备工作 首先,确保您已经安装了最新版本的 Unity 引擎。创建一个新的 Unity 项目或者打开您现有的项目…...

2024年最全渗透测试学习指南,小白也能轻松hold住!零基础到精通,看完这篇就够了!
可能会有很多人觉得渗透测试门槛很高,学习周期长,似乎只有天赋异禀者方能涉足。实则不然,渗透测试行业虽有其专业门槛,但绝非如外界渲染的那样高不可攀。归根结底,所需的基础不过是扎实的编程语言功底,同时…...

有道云docx转换markdown,导入hugo发布到github page,多平台发布适配
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 有道云导出docx 有道云笔记右上角更多按钮选择【导出为Word】,可以导出docx文档 docx转换markdown 尝试了几个docx转markdown的python库后&…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
[特殊字符] Spring Boot底层原理深度解析与高级面试题精析
一、Spring Boot底层原理详解 Spring Boot的核心设计哲学是约定优于配置和自动装配,通过简化传统Spring应用的初始化和配置流程,显著提升开发效率。其底层原理可拆解为以下核心机制: 自动装配(Auto-Configuration) 核…...