Nginx Rewrite

news/2024/10/7 10:22:47

目录
  • 1.常用的Nginx 正则表达式
  • 2.location
  • 3.rewrite

1.常用的Nginx 正则表达式

^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字[0-9]   \s :空白符    \w :任意单词字符包括下划线[A-Za-z0-9_]
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符

从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。
rewrite 对访问的域名或者域名内的URL路径地址重写
location 对访问的路径做访问控制或者代理转发

2.location

location 通过前缀或正则匹配用户的URL访问路径做页面跳转、访问控制和代理转发

location  URL路径       #一般前缀匹配
location = URL路径      #精准匹配
location ^~ URL路径     #前缀匹配
location ~ URL路径      #正则匹配,区分大小写
location ~* URL路径     #正则匹配,不分区大小写
location !~ URL路径     #正则匹配取反
location !~* URL路径    #正则匹配取反,不分区大小写location匹配机制:
优先级:精准匹配 =  >  最长前缀匹配 ^~  >  正则匹配 ~ ~* !~ !~*  >  一般前缀匹配 /XXXX  >  通用匹配 /注:在没有合适的精准匹配的情况下,先看前缀匹配的长度,取最长匹配的location(如果此最长匹配是带有^~的则不再看正则匹配;如果此最长匹配是不带有^~的则会继续再看正则匹配)
前缀匹配看长度,最长的优先匹配;正则匹配看上下顺序,根据nginx配置文件的配置由上往下依次匹配,匹配到即停止
#网站首页匹配
location = / {root 网页根目录;index index.html;
}#网站静态页面,通过前缀匹配或通用匹配在nginx服务器本地处理
location ~ /static/ {root 目录;
}location / {root 目录;
}#网站动态页面,通过匹配不同的动态网页文件后缀转发给不同的后端应用服务器处理
location \.php$ {fastcgi_pass PHP服务器地址:端口;
}location \.jsp$ {proxy_pass TOMCAT服务器地址:端口;
}

3.rewrite

rewrite 对用户的URL访问路径进行重写,再重定向跳转访问重写后的路径

rewrite格式
rewrite  正则表达式  重写的地址  [标记位];
标记位
last 本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中
break 本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中
permanent 返回302临时重定向,浏览器地址会显示跳转后的URL地址
redirect 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

rewrite默认情况下只对从域名后面的根目录 / 开始到传递参数的 ? 号前面的URL路径进行重写

##默认只对域名后面的URL部分重写
rewrite 正则表达式 /新URL;                   
http://域名/旧URL  ->  http://域名/新URL    ##如果需要全域名路径重写需要加上协议和域名        
rewrite 正则表达式 http://新域名/新URL;       
http://旧域名/旧URL  ->  http://新域名/新URL;      http://域名/旧URL  --rewrite重写-->  http://域名/新URL -->  location匹配新URL路径跳转页面rewrite 正则表达式 /新URL  permanent;     #重写后会修改浏览器里的地址栏再重新访问
http://域名/旧URL  --rewrite重写-->  http://域名/新URL --> 浏览器地址栏也会改为 http://域名/新URL 再发起一次访问请求 -->  location匹配新URL路径跳转页面





location ~ URL路径正则表达式 {rewrite  正则表达式  重写的地址  [标记位];
}$request_uriif ($uri ~ URL路径正则表达式) {rewrite  正则表达式  重写的地址  [标记位];
}






$request_uri:包含请求参数的原始URI,不包含主机名
$uri:这个变量指当前的请求URI,不包括任何参数
$document_uri:与$uri相同,这个变量指当前的请求URI,不包括任何传递参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/42797.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

3_@Autowired注解失效分析

1. Aware 接口 Aware 接口提供了一种[内置]的注入手段,可以注入BeanFactory, ApplicationContext。内置的注入和初始化不受扩展功能的影响,总会被执行,因此Spring 框架的内部类常使用它们。 InitializingBean 接口提供了一种[内置]的初始化手段。 Aware的作用就是注入与容器…

【内存管理】内存布局

ARM32位系统的内存布局图 32位操作系统的内存布局很经典,很多书籍都是以32位系统为例子去讲解的。32位的系统可访问的地址空间为4GB,用户空间为1GB ~ 3GB,内核空间为3GB ~ 4GB。为什么要划分为用户空间和内核空间呢? 一般处理器会把运行模式分为好几个,比如x86分为rang0 ~…

【esp32 项目】中断读取按键

原理图:图 按键部分图 单片机部分 程序:KEY_USR 引脚配置成上拉输入 在Arduino中,配置一个IO为上拉输入可以使用pinMode()函数和digitalWrite()函数。pinMode()函数用于设置引脚模式,而digitalWrite()函数用于设置上拉电阻。 以下是一个示例代码,展示如何将Arduino的数字引…

【操作系统】页表映射

页表的一些术语 现在Linux内核中支持四级页表的映射,我们先看下内核中关于页表的一些术语:全局目录项,PGD(Page Global Directory)上级目录项,PUD(Page Upper Directory)中间目录项,PMD(Page Middle Directory)页表项,(Page Table)大家在看内核代码时会经常看的以…

算法金 | AI 基石,无处不在的朴素贝叶斯算法

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」历史上,许多杰出人才在他们有生之年默默无闻, 却在逝世后被人们广泛追忆和崇拜。 18世纪的数学家托马斯贝叶斯(Thomas Bayes)便是这样一位人物贝叶斯的研究,初看似…

OO第五、六次大作业总结

一、前言在经过了第一阶段的迭代大作业之后,我们迎来了新的迭代大作业-智能电器模拟系统。 在这个阶段的大作业中,我们需要编写模拟家用电器与电路的程序。 二、设计与分析在经过了第一次迭代大作业的折磨之后,我总结之前出现的问题,在之前的大作业中,我在类的设计方面做的…

【转载】GDB高级技巧:边Debug边修复BUG,无需修改代码,无需重新编译

调试是每个程序员都逃不过的宿命! 程序调试是一件非常考验耐心的事情,因为调试过程中经常会需要反复的修改源码,重新编译、重新部署、重新运行,这个过程通常是非常枯燥和繁琐的。尤其对于大型项目,光是编译可能需要几十分钟,甚至几个小时,部署过程则可能更为复杂漫长! …

【转载】C 语言有什么奇技淫巧

快速范围判断 经常要批量判断某些值在不在范围内,如果 int 检测是 [0, N) 的话: if (x >= 0 && x < N) ...众所周知,现代 CPU 优化,减分支是重要手段,上述两次判断可以简写为: if (((unsigned int)x) < N) ...减少判断次数。如果 int 检测范围是 [minx,…