重写功能 rewrite

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之

一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问,另外还可以在一定程度上提高网站的安全性。

ngx_http_rewrite_module模块指令

官方文档: Module ngx_http_rewrite_module

if 指令

官方文档:

Module ngx_http_rewrite_module

  • if指令可以配置在server或location块中

  • if指令用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置
  • Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断
  • 使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false

用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断,用法如下:

if (条件匹配) {  action
}

使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间使用以下符号链接:

= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false

!=  #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false

~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假

!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假

~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假

!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真

-f 和 !-f #判断请求的文件是否存在和是否不存在

-d 和 !-d #判断请求的目录是否存在和是否不存在

-x 和 !-x #判断文件是否可执行和是否不可执行

-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

#注意:

#如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。

#nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false

 return 指令

  • return用于完成对请求的处理,并直接向客户端返回响应状态码
  • return可以在server、location块和 if 进行配置
  • 处于此指令后的所有配置都将不被执行

语法格式:

Syntax:        return code [text];  //返回给客户端的状态码及响应报文的实体内容return code URL;    //返回给客户端的URL地址return URL;
Default:        —
Context:        server, location, if

状态码 301 和 302

状态码

含义

区别

301

永久重定向

服务器不需要每次向客户提供新的url,客户访问过后会记录在自己的缓存中,即使nginx服务器死机,客户在一定时间内也可以继续跳转

302

临时重定向

没有缓存,服务器断开无法重定向

 

 

set 指令

  • set定义格式为set $key value
  • 指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key
  • value可以是text, variables和两者的组合

语法格式:

Syntax:        set $variable value;
Default:        —
Context:        server, location, if

break 指令

  • 用于中断 当前相同作用域(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的 ngx_http_rewrite_module 模块中指令就不再执行。

语法格式:

Syntax:        break;
Default:        —
Context:        server, location, if

rewrite 指令

  • 通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配,rewrite主要是针对用户请求的URL或者是URI做具体处理

语法格式:

Syntax:        rewrite regex replacement [flag];
Default:        —
Context:        server, location, if//正则匹配原始访问url    替代你想让客户访问的     标志 ()premanent301   redirect302  break  last

flag 说明:

类型

flag

区别

跳转型

redirect

临时重定向302

 

permanent

永久重定向301

代理型

break

是立即终止匹配  使用该url进行匹配

 

last

停止本location中的匹配,开启新一轮的location匹配

  • 跳转型指由客户端浏览器重新对新地址进行请求
  • 代理型是在WEB服务器内部实现跳转
  • break 和 last 是为了防止死循环使用的

防盗链

防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的referer信息有以下几种:

none:请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。

blocked:请求报文有referer首部,但无有效值,比如为空。

server_names:referer首部中包含本主机名及即nginx 监听的server_name。

arbitrary_string:自定义指定字符串,但可使用 * 作通配符。示例:*.kgc.org 或 www.kgc.*

regular expression:被指定的正则表达式模式匹配到的字符串,要使用 ~ 开头,例如:~.*.kgc.com

​
location ~* \.(jpg|gif|swf)$ {           root  /data/nginx/pc;valid_referers none blocked *.pc.com pc.com;  if ( $invalid_referer ) {rewrite ^/ http://www.pc.com/error.png;#return  403}}              
~* \.(jpg|gif|swf)$:这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件Valid_referers:设置信任的网站,可以正常使用图片。None :浏览器中 referer 为空的情况,就是直接在浏览器访问图片。Blocked :referer 不为空的情况 ,但是值被代理或防火墙删除了,这些值不以 http://或https://开头。后面的网址或者域名:referer 中包含相关字符串的网址。If 语句:如果链接的来源域名不在 valid_referers 所列出的列表中,$invalid_referer 为1,则执行后面的操作,即进行重写或返回 403 页面。

 实际操作

#机器一
server {listen 80;server_name www.cc.com;root /data/html;index index.html;
location ~* \.(jpg|gif|swfjepg|bmp)$ {
#访问时已上面这些结尾时跳转到/data/html/tp文件夹下
root /data/html/tp;
}
}
#在/data/html/tp站点下加入一张测试图片a.jpg#盗图机器二
需要在/etc/hosts文件下加入www.cc.com的域名解析#设置盗图机器的主站点
server {
listen 80;
server_name www.dao.com;
root /data/;
}#在主站点下写一个index.html文件
vim  index.html
<html>
<body>
<h1>this is daotu  </h1>
<img src="http://www.cc.com/a.jpg"/>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

充电宝口碑哪个好?好用充电宝品牌有哪些?好用充电宝推荐

充电宝作为我们日常生活和出行的重要伙伴&#xff0c;其品质和性能直接影响着我们的使用体验。今天&#xff0c;就来和大家探讨一下充电宝口碑哪个好&#xff0c;为大家盘点那些备受赞誉的好用充电宝品牌&#xff0c;并向您推荐几款值得入手的充电宝&#xff0c;外出时不再担心…

mac英语学习工具:Eudic欧路词典 for Mac 激活版

Eudic欧路词典是一款非常受欢迎的英语学习软件&#xff0c;它提供了丰富的词汇解释、例句、同义词、反义词等功能&#xff0c;帮助用户更好地理解和掌握英语单词。 以下是Eudic欧路词典的一些主要特点&#xff1a; 海量词汇库&#xff1a;Eudic欧路词典拥有庞大的词汇库&#…

flutter photo_manager 报错:Error: ‘DecoderCallback‘ isn‘t a type.

看看是不是你的photo_manager版本少于3.0。如果是少于3.0&#xff0c;请及时升级到3.0及以上版本&#xff0c;同时因为photo_manager3.0不再提供 AssetEntityImageProvider 这个方法&#xff0c;会导致报错&#xff0c;不要慌&#xff0c;请添加下方的库即可解决问题&#xf…

为什么人人都要懂一些销售思维

创业看事情的高度、考虑的维度比做销售更高、更复杂、更全面&#xff0c;销售思维、销售方法更多时候用在解决局部问题&#xff0c;帮我们打局部战争&#xff0c;它是术。 但是&#xff0c;我仍然认为&#xff0c;销售思维是一种很有用、有效、有力量、必要的思维。我们每个人…

面试题002-Java-Java集合

面试题002-Java-Java集合 目录 面试题002-Java-Java集合题目自测题目答案1. 说说 List,Set,Map 三者的区别&#xff1f;三者底层的数据结构&#xff1f;2. 有哪些集合是线程不安全的&#xff1f;怎么解决呢&#xff1f;3. 比较 HashSet 、LinkedHashSet 和 TreeSet 三者的异同&…

简过网:考一建需要报培训班吗?报班费用是多少钱

近几年来&#xff0c;越来越多的朋友都开始关注和参与备考一建&#xff0c;那么&#xff0c;大家在备考一建时&#xff0c;都报培训班了吗&#xff1f;报班的费用是多少钱&#xff1f;接下来&#xff0c;我们一块来了解一下吧&#xff1f; ​ 一、考一建需要报培训班吗&#…

【Jetpack】Lifecycle之自定义LifecycleOwner

Lifecycle设计讲解 Lifecycle的设计其实十分简单&#xff0c;主要就是Lifecycle对象和LifecycleOwner接口 Lifecycle用于记录对象的生命周期&#xff0c;以及在生命周期发生改变时通知外部 LifecycleOwner用于表示对象具备生命周期管理能力 LifecycleOwner的实现方式很简单&…

赛目科技三度递表:净利率及资产回报率不断下滑,经营成本越来越高

《港湾商业观察》施子夫 5月29日&#xff0c;北京赛目科技股份有限公司&#xff08;以下简称&#xff0c;赛目科技&#xff09;第三次递表港交所&#xff0c;公司拟主板上市&#xff0c;独家保荐机构为光银国际。 公开信息显示&#xff0c;赛目科技此前曾于2022年12月&#x…

Java全套智慧校园系统源码:核心功能、发展趋势、基于电子班牌: Android 7.1+小程序:原生开发+多学校Saas 模式

Java全套智慧校园系统源码&#xff1a;核心功能、发展趋势、基于电子班牌&#xff1a; Android 7.1小程序&#xff1a;原生开发多学校Saas 模式 智慧校园系统是一个集成了多种功能的综合性平台&#xff0c;旨在提升校园内的教学、管理、服务等方面的效率和体验。那么&#xff…

比较(五)利用python绘制棒棒糖图

比较&#xff08;五&#xff09;利用python绘制棒棒糖图 棒棒糖图&#xff08;Lollipop plot&#xff09;简介 棒棒糖图实际上是修饰后的条形图。当在处理大量的值&#xff0c;并且当这些值都很高时&#xff0c;棒棒糖图就很有用。 快速绘制 基于matplotlib import pandas as…

【前端环境1】安装nvm

【前端环境1】安装nvm 写在最前面一、下载nvm二、安装教程三、验证nvm安装 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成…

狗都能看懂的Reinforcement Learning简介

文章目录 一、什么是强化学习二、强化学习的应用 一、什么是强化学习 强化学习的流程可以用上面这张图来说明&#xff1a;智能体&#xff08;Agent&#xff09;对环境进行观测&#xff0c;然后根据观测结果&#xff08;Observation / State&#xff09;采取相应的动作&#xff…

实现Ubuntu计划任务的反弹shell

一、实验环境 Ubuntu&#xff1a;IP地址&#xff1a;192.168.223.156 Kali : IP地址&#xff1a;192.168.223.152 二、编写crontab计划任务 在Ubuntu的系统中使用crontab -e命令编写计划任务&#xff0c;如下所示&#xff1a; 作用&#xff1a;是将一个交互式的bash …

device_node和platform_device的生成流程

1. machine_desc的匹配 《这篇》有介绍DT_MACHINE_START的一些初始化操作&#xff0c;匹配上就会在后续的初始化中调用DT_MACHINE_START的成员来初始化系统的设备树&#xff0c;时钟&#xff0c;中断等 start_kernelsetup_arch(&command_line);mdesc setup_machine_fdt(…

行列视报表系统制作的报表与厂级监控信息系统(SIS)系统中的报表有什么区别?

厂级监控信息系统是集过程实时监测、优化控制及生产过程管理为一体的厂级自动化信息系统&#xff0c;是处于DCS以及相关辅助程控系统与全厂管理信息系统之间的一套实时厂级监控信息系统&#xff0c;该产品也是本公司的一套独立产品。 SIS系统中的报表只是其中的一个模块&#…

混合云管道的未来:集成 MinIO、Tailscale 和 GitHub Actions

数据处理是现代软件开发的基本实践。它使团队能够自动收集、处理和存储数据&#xff0c;确保高质量的数据和高效的处理。 在本文中&#xff0c;我们将探讨如何建立一个全面的数据处理管道&#xff0c;重点介绍如何使用 Tailscale GitHub Action 进行安全网络。此设置还将包含 …

植物大战僵尸杂交版手机下载与安装全攻略

植物大战僵尸杂交版是一款深受玩家喜爱的策略冒险游戏&#xff0c;以其丰富的植物种类、多样的关卡设计和趣味的玩法著称。本文将为您提供详细的下载与安装教程&#xff0c;帮助您快速上手&#xff0c;享受游戏带来的乐趣。 游戏简介 植物大战僵尸杂交版在传统玩法的基础上&a…

【机器学习】语音转文字 - FunASR 的应用与实践(speech to text)

本文将介绍 FunASR&#xff0c;一个多功能语音识别模型&#xff0c;包括其特点、使用方法以及在实际应用中的表现。我们将通过一个简单的示例来展示如何使用 FunASR 将语音转换为文字&#xff0c;并探讨其在语音识别领域的应用前景。 一、引言 随着人工智能技术的不断发展&am…

linux的安全技术和防火墙

一、安全技术 1.入侵检测系统&#xff1a;特点式不阻断网络访问&#xff0c;主要式提供报警和事后监督&#xff0c;不主动介入&#xff0c;默默的看着你&#xff08;相当于360安全卫士&#xff09; 2.入侵防御系统&#xff1a;透明模式工作&#xff0c;对数据包&#xff0c;网…

平价高性价比蓝牙耳机有哪些?盘点好用平价的蓝牙耳机推荐

在当今快节奏的生活中&#xff0c;蓝牙耳机已经成为人们日常生活中不可或缺的配件&#xff0c;它们不仅让我们可以在行走、工作或者锻炼时享受音乐&#xff0c;还提供了便利的通话功能。然而&#xff0c;市面上蓝牙耳机种类繁多&#xff0c;价格相差甚远&#xff0c;大家往往难…