nginx--rewrite

功能

Nginx服务器利用ngx_http_rewrite_module 模块解析和处理理rewrite请求,此功能依靠PCRE(Perl Compatible Regular Expressions),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为访问,另外还可以在一定程度上提高网站的安全性

PCRE官方站点: http://www.pcre.org/

模块指令

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

 if

使用

Nginx的if语法仅能用if做单次判断,不支持使用if else或者if elif这样的多重判断,可以配置在server或location块中进行配

语法

if (条件匹配) {
     action
}

正则表达式

=:比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false。
!=: 比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false。
~:表示在匹配过程中区分大小写字符,(可以通过正则表达式匹配),满足匹配条件为真,不满足为假。
!~:为区分大小写字符且匹配结果不匹配,不足满为真,满足为假。
~*: 表示在匹配过程中不区分大小写字符,(可以通过正则表达式匹配),满足匹配条件真,不满足为假。
!~*: 为不区分大小字符且匹配结果不匹配,满足为假,不满足为真。
-f 和 ! -f: 判断请求的文件是否存在和是否不存在
-d 和 ! -d: 判断请求的目录是否存在和是否不存在。
-x 和 ! -x: 判断文件是否可执行和是否不可执行。
-e 和 ! -e: 判断请求的文件或目录是否存在和是否不存在(包括文件、目录、软链接)。

 案例

文件存在
location /m78 {root /data/nginx/html/pc;default_type text/html;if (-f $request_filename){echo "look look look";}}  }
​ 
 文件不存在
  location /m78 {root /data/nginx/html/pc;default_type text/html;if (-f $request_filename){echo "look look look";}}  }

 

 判断网站的协议
  location /m78 {root /data/nginx/html/pc/www;default_type text/html;if ( $scheme = http ){echo "website is http";} if ( $scheme = https ){echo "website is https";}}  }

​ 

 set

使用

自定义变量,定义的变量可以调用nginx内置变量,也可以调用值

语法

set $key $value

案例

 location /m78 {root /data/nginx/html/pc/www;default_type text/html;if ( $scheme = http ){echo "website is http";} if ( $scheme = https ){echo "website is https";}}  

break

使用

退出操作,不在执行后面的指令,可以使用在server,location,if

案例

  location /m78 {root /data/nginx/html/pc/www;default_type text/html;set $name fxq;echo $name;break;set $port $server_port;echo $port;}  }

return

使用

return⽤用于完成对请求的处理,并直接向客户端返回响应状态码,可以指定重定向URL或者指定提示文本内容(特殊状态码403/500等),处于此指令所有配置不执行,可应用在server,if,location

语法

 return code; 返回给客户端指定的HTTP状态码

 return code (text); 返回给客户端的状态码及响应体内容,可以调用变量

 return code URL;返回给客户端的URL地址

案例

返回状态码
  location /m78 {root /data/nginx/html/pc/www;default_type text/html;if ( $scheme = http ) {return 555;  }}  }

 返回状态码并显示文本内容
  location /m78 {root /data/nginx/html/pc/www;default_type text/html;if ( $scheme = http ) {return 555 " website is no exist";  }}  }

  返回状态码并跳转
  location /m78 {root /data/nginx/html/pc/www;default_type text/html;if ( $scheme = http ) {return 301 http://xiaodi8.com/;  }}  }

rewrite_log

使用

设置是否开启记录ngx_http_rewrite_module模块日志记录到error_log日志文件当中,可以配置http、server、location或if当中,需要日志级别为notice

rewrite

URL和URI

URI(universal resource identifier):通用资源标识符,标识一个资源的路径,可以不带协议。
URL(uniform resource location):统一资源定位符,是用于在Internet中描述资源的字符串,是
URI的子集,主要包括传输协议(scheme)、主机(IP、端口号或者域名)和资源具体地址(目录和文件名)等三部分,⼀一般格式为 scheme://主机名[:端口号][/资源路径],如:http://www.a.com:8080/path/file/index.html就是⼀一个URL路径,URL必须带访问协议。
每个URL都是⼀个URI,但是URI不都是URL。

例如:
http://example.org:8080/path/to/resource.txt #URI/URL
ftp://example.org/resource.txt #URI/URL
/absolute/path/to/resource.txt #URI

使用

可以配置server、location、if

 参考:https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

 语法

rewrite regex replacement [flag];
rewrite 正则匹配客户端请求 修改后的请求 标记位;

注意

如果在同⼀级配置块中存在多个rewrite规则,那么会自下⽽下逐个检查;被某条件规则替换完成后,会重新⼀轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制,如果替换后的URL是以http://或https://开头,则替换结果会直接以重向返回给客户端, 即永久重定向301

rewrite flag

使用

利用nginx的rewrite的指令,可以实现url的重新跳转,rewrtie有四种不同的flag,分别是redirect(临时重定向,状态码302)、permanent(永久重定向,状态码301)、break和last。其中前两种是跳转型的flag,后两种是代理型,跳转型是指有客户端浏览器重新对新地址进行请求,代理型是在WEB服务器内部实现跳转的。

参数

redirect;临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302

permanent;重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301

last;重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在多location配置环境中使用

break;重写完成后停止对当前URL在当前location中后续的其它重写操作,而后直接将匹配结果返还给客户端即结束循环并返回数据给客户端,建议在多location配置环境中使用

 案例

permanent
  location /m78 {root /data/nginx/html/pc;default_type text/html;rewrite / http://xiaodi8.com permanent;}  } 

 redirect
  location /m78 {root /data/nginx/html/pc;default_type text/html;rewrite / http://xiaodi8.com redirect;}  }

break

1.结束当前location后续的write操作

2.break结束后会直接返回数据,不会跳出当前location再对URL进行和其他location匹配

[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf
server {listen 80;listen       443 ssl;ssl_certificate  /apps/nginx/certs/www.fxq.com.crt;ssl_certificate_key /apps/nginx/certs/www.fxq.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name www.fxq.com;location / {root /data/nginx/html/pc;index index.html;}location = /favicon.ico {root /data/nginx/html/pc;}location /break {#return 666 "break";root /data/nginx;index index.html;rewrite ^/break/(.*) /test1/$1 break;#break匹配成功后不再向下匹配,也不会跳转到其他的location,即直接结束匹配并给客户端返回结果数据。rewrite ^/break/(.*) /test1/$2 break;#break不会匹配后面的rewrite规则也不匹配其location}location  /test1 {#return 999 "test1";root /data/nginx;index index.html;}location /test2 {#return 777;root /data/nginx;index index.html;}}

last

1.结束当前location后续的write操作

2.当前location的write结束后会将产生的新的URL跳出当前loction进行与其他location的匹配

[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf 
server {listen 80;listen       443 ssl;ssl_certificate  /apps/nginx/certs/www.fxq.com.crt;ssl_certificate_key /apps/nginx/certs/www.fxq.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name www.fxq.com;location / {root /data/nginx/html/pc;index index.html;}location = /favicon.ico {root /data/nginx/html/pc;}location /break {#return 666 "break";root /data/nginx;index index.html;rewrite ^/break/(.*) /test1/$1 last;rewrite ^/break/(.*) /test1/$2 last;}location  /test1 {#return 999 "test1";root /data/nginx;index index.html;}location  /test2 {#return 777;root /data/nginx;index index.html;}}

自动跳转http
[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf 
server {listen 80;listen       443 ssl;ssl_certificate  /apps/nginx/certs/www.fxq.com.crt;ssl_certificate_key /apps/nginx/certs/www.fxq.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name www.fxq.com;location / {root /data/nginx/html/pc;index index.html;if ( $scheme = http ) { #未加条件判断,会导致死循环rewrite / https://www.fxq.com/;}}location = /favicon.ico {root /data/nginx/html/pc;}}

 判断文件是否存在
[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf 
server {listen 80;listen       443 ssl;ssl_certificate  /apps/nginx/certs/www.fxq.com.crt;ssl_certificate_key /apps/nginx/certs/www.fxq.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name www.fxq.com;location / {root /data/nginx/html/pc;index index.html;if ( !-f $request_filename ) {rewrite (.*) https://www.fxq.com/;}}location = /favicon.ico {root /data/nginx/html/pc;}}   

文件绝对安全

chattr +i 文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Video Mamba Suite》论文笔记(4)Mamba在时空建模中的作用

原文翻译 4.4 Mamba for Spatial-Temporal Modeling Tasks and datasets.最后,我们评估了 Mamba 的时空建模能力。与之前的小节类似,我们在 Epic-Kitchens-100 数据集 [13] 上评估模型在zero-shot多实例检索中的性能。 Baseline and competitor.ViViT…

【网络编程】UDP协议和TCP协议1

UDP协议格式 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。 UDP协议如何将报头和有效载荷分离 UDP报头是一种定长报头,长度为8个字节。…

QCC3071/QCC3081/QCC3083/QCC3084/QCC5171/QCC5181/QCC3091/QCC3095平台LDAC解码

QCC3071/QCC3081/QCC3083/QCC3084/QCC5171/QCC5181/QCC3091/QCC3095平台LDAC解码 LDAC Decoder Evaluation Kit for QCC5181 and QCC5171 (The 5181 Kit) 随着Qualcomm DSP向下开放,QCC3071/QCC3081/QCC3083/QCC3084目前可以可以实现LDAC Decoder。 QCC3071/QCC3…

【Shell脚本】Shell编程之循环语句

目录 一.循环语句 1.for语句的结构 1.1.格式 1.2.实操案例 案例1. 案例2. 案例3. 案例4. 2.while语句的结构 2.1.格式 2.2.实操案例 案例1. 案例2. 案例3. 案例4. 3.until循环命令 3.1.格式 3.2.实操案例 案例1. 二.补充 1.常用转义符 一.循环语句 1.for…

56 关于 linux 的 oom killer 机制

前言 这里主要讲的是 linux 的 oom killer 机制 在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存。 通常oom_killer的触发流程是:进程A想要分配物理内存(通常是读写内存&#…

笨方法自学python(九)-读写文件

读取文件 前面已经学过了 input 和 argv,这些是你开始学习读取文件的必备基础。你可能需要多多实验才能明白它的工作原理,这节练习涉及到写两个文件。一个正常的 ex15.py 文件,另外一个是 ex15_sample.txt,第二个文件并不是脚本&…

图像锐化——非锐化掩膜USM和锐化掩膜SM(附代码)

非锐化掩膜 (USM) 和锐化掩膜 (SM) 都是常用的图像锐化技术。它们都可以通过增强图像的边缘信息来提高图像的清晰度。 目录 一、非锐化掩膜USM1.1 USM原理1.2 USM实现步骤1.3 优点1.4 代码 二、锐化掩膜SM2.1 SM原理2.2 SM实现步骤2.3 优点2.4 代码 三、锐化效果四、总结4.1 效…

Qt三方库:QuaZIP介绍、编译和使用

前言 Qt使用一些压缩解压功能,探讨过libzip库,zlib库,libzip库比较原始,还有其他库,都比较基础,而在基础库之上,又有高级封装库,Qt中的QuaZIP是一个很好的选择。Quazip是一个用于压缩…

5.11学习记录

20长安杯部分 检材 1 的操作系统版本 CentOS Linux 7.6.1810 (Core) 检材 1 中,操作系统的内核版本是 3.10.0-957.el7.x86_64 检材 1 中磁盘包含一个 LVM 逻辑卷,该 LVM 开始的逻辑区块地址(LBA)是 2099200 物理卷&#xff…

20240510每日后端---聊聊文件预览,doc,image,ppt转PDF预览

一、引入依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>crac…

(Mac)RocketMQ的本地安装测试(详细图示)

目录 部署服务 namesrv / broker下载解压缩运行 namesrvnohup ./bin/mqnamesrv & 启动命令详解运行 broker 测试收发消息运行自带的生产者测试类运行自带的消费者测试类 部署 Dashboard 可视化下载打包运行访问 部署服务 namesrv / broker 下载解压缩 官网下载 https://r…

mac苹果电脑卡顿反应慢如何解决?2024最新免费方法教程

苹果电脑以其稳定的性能、出色的设计和高效的操作系统&#xff0c;赢得了广大用户的喜爱。然而&#xff0c;随着时间的推移&#xff0c;一些用户会发现自己的苹果电脑开始出现卡顿、反应慢等问题。这不仅影响使用体验&#xff0c;还会影响工作效率。那么&#xff0c;面对这些问…

FPGA -手写异步FIFO

一&#xff0c;FIFO原理 FIFO&#xff08;First In First Out&#xff09;是一种先进先出的数据缓存器&#xff0c;没有外部读写地址线&#xff0c;使用起来非常简单&#xff0c;只能顺序写入数据&#xff0c;顺序的读出数据&#xff0c;其数据地址由内部读写指针自动加1完成&a…

win10无法被远程桌面连接,Win10系统无法被远程桌面连接的原因有哪些

win10无法被远程桌面连接&#xff0c;Win10系统无法被远程桌面连接的原因有哪些&#xff1f; 先&#xff0c;我们需要明确Win10系统无法被远程桌面连接的可能原因。其中&#xff0c;最常见的原因包括&#xff1a;远程桌面功能未启用、网络连接问题、防火墙或安全软件设置不当、…

哪个牌子的电视盒子好用?小编分享最新电视盒子排名

最近电视盒子是大家热议的话题&#xff0c;就目前来看它的地位依然无可替代&#xff0c;但许多朋友硬不知道哪个牌子的电视盒子好用&#xff0c;面对众多品牌和产品究竟要如何选择才是最好的呢&#xff1f;本期小编要分享最新发布的电视盒子排名&#xff0c;看看哪些电视盒子最…

C++ 抽象与封装

一 抽象 抽象实例&#xff1a;时钟 数据抽象&#xff1a; 具有表面当前时间的时、分、秒 行为抽象&#xff1a; 具有设置时间和显示时间两个最基本的功能。 抽象实例&#xff1a;人 数据抽象&#xff1a;姓名、年龄、性别等。 行为抽象&#xff1a; 生物属性&#xff1a;吃…

【线性代数】英语版听课笔记

线性代数 - 北京航天航空大学&#xff08;英文版&#xff09;_哔哩哔哩_bilibili 39.concept of vector space in this lecture we will studyvector space&#xff0c; the concept of basis dimension and coordinates 向量空间的维数&#xff1a;向量空间的基底所含向量的…

TCP超时重传机制

一、TCP超时重传机制简介 TCP超时重传机制是指当发送端发送数据后&#xff0c;如果在一定时间内未收到接收端的确认应答&#xff0c;则会认为数据丢失或损坏&#xff0c;从而触发重传机制。发送端会重新发送数据&#xff0c;并等待确认应答。如果在多次重传后仍未收到确认应答&…

车载测试__公司面试题(整理)

案例1&#xff1a; 镁佳 外包岚图汽车 车载测试 区域经理视频面试 1.首先自我介绍一下 2.项目是怎么测的举例说明 3.你是怎么看待加班的 4.你是怎么看待驻场单位 5.是否可以接受外派去做一段时间的技术支持&#xff0c;比如去襄阳&#xff0c;最长一个月。 6.多快能到…

Codigger:优化Vim编辑器的关键是可视化

Vim是一款高度灵活的文本编辑器&#xff0c;以其高效的快捷键和命令行界面而闻名。然而&#xff0c;对于一些初学者来说&#xff0c;Vim的复杂性和强大的功能可能会让他们感到困惑。为了使Vim更易于使用&#xff0c;Codigger引入可视化操作的概念&#xff0c;将原本抽象的、难以…