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

重定向及基础实验

1.if指令

if (判断条件){

执行语句;

}

if的正则表达式

= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!=  #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假

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


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

实例

location /main {index index.html;default_type text/html;if ( $scheme = http ){echo "if-----> $scheme";}if ( $scheme = https ){echo "if ----> $scheme";}

结果为,当我们使用http来访问此站点时。那么,会回复“if------>http”;当我们使用https来访问此站点时。那么,会回复“if------>https”。

server {listen 80;server_name www.kgc.com;root /usr/local/nginx/html/;location / {root /data/nginx/pc/;}location /test {default_type text/plain;return  301 https://www.baidu.com;}location /main {index index.html;default_type text/html;if ( $scheme = http ){return 666 "if-----> $scheme";}}#if (!-e $request_filename){#return 200 "$request_filename\n";#return 302 /index.html;#}
}

访问192.168.174.104/main得到的结果:

这时,我们将最后四个注释删掉,再次访问192.168.174.104/main得到的结果:

返回主站点。

或者

可以得到我们访问文件的路径

2.return

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置。

  location /main {index index.html;default_type text/html;#if ( $scheme = http ){return 666 "if-----> $scheme";#}}

访问结果:

日志文件:

实际应用

server {listen 80;server_name www.kgc.com;root /usr/local/nginx/html/;location /test {default_type text/plain;return  301 https://www.baidu.com;}location /main {index index.html;default_type text/html;if ( $scheme = http ){return 666 "if-----> $scheme";}}if (!-e $request_filename){#return 200 "$request_filename\n";return 302 /index.html;}
}

我们来依次翻译每一段字符的含义:

server {:定义虚拟主机,我们可以使用他来运行多个网站。

listen 80:监听在本机的80端口上。

server_name www.kgc.com:定义的域名为www.kgc.com。

root /usr/local/nginx/html/:默认的主站点所在的目录。

location /test{:如果url为test就执行括号的指令或者文件。

default_type text/plain:默认为纯文本格式。

return  301 https://www.baidu.com:输出状态码为301(永久重定向),将访问到百度。

}:location的后括号。

location /main {:另一个locatio,如果url为/main,则访问此location下。

index index.html:访问index.html文件。

default_type text/html:默认为纯文本格式。

if ( $scheme = http ){:if判断,如果判断成立,则会执行下面的语句。

return 666 "if-----> $scheme":输出状态码为666(无特殊含义),输出内容为“if----->协议”

}:if的后括号

}:location的后括号

if (!-e $request_filename){:if判断,如果判断成立,则会执行下面的语句。

#return 200 "$request_filename\n":被注释掉的代码,本来的意思为输出当前请求文件的路径,并在结尾加上换行符。

return 302 /index.html:输出状态码为302(即临时重定向),将url变为/index.html来重新匹配。

}:if的后括号

}:server的后括号
 

访问结果

192.168.174.104/test:已经有了缓存

由于没有访问mian的路径,会直接跳转到主站点

将最后的if判断注释掉

http://www.xdnf.cn/news/4849.html

相关文章:

  • QStackedLayout、QStackedWidget 二者的区别?
  • 桥隧坡灾害监测报警:用科技筑起生命安全的“智能防线”
  • C++23 views::as_rvalue (P2446R2) 深入解析
  • Hutool中的Pair类详解
  • Simufact Welding重塑新能源汽车电池盒焊接工艺
  • C程序题案例分析
  • Nacos源码—6.Nacos升级gRPC分析一
  • 缓存(1):三级缓存
  • 企业如何借助国外动态IP抢占海外市场先机?
  • uniapp 微信小程序使用图表
  • 人工智能在网络安全中的重要性
  • kotlin JvmName注解的作用和用途
  • 【WebRTC-13】是在哪,什么时候,创建编解码器?
  • 驱动开发硬核特训 · Day 30(下篇): 深入解析 lm48100q I2C 音频编解码器驱动模型(基于 i.MX8MP)
  • 【MCP】为什么使用Streamable HTTP: 相比SSE的优势与实践指南
  • 初识Dockerfile之RUN和WORKDIR
  • 【MySQL】第二弹——MySQL表的增删改查(CURD))
  • [ctfshow web入门] web57
  • 2025 后端自学UNIAPP【项目实战:旅游项目】3、API接口请求封装,封装后的简单测试以及实际使用
  • springCloud/Alibaba常用中间件之GateWay网关
  • 大型语言模型在网络安全领域的应用综述
  • 【WEB3】区块链、隐私计算、AI和Web3.0——数据民主化(1)
  • Python爬虫(21)Python爬虫进阶:Selenium自动化处理动态页面实战解析
  • RabbitMQ--基础篇
  • Android Studio 模拟器配置方案
  • 跨平台移动开发框架React Native和Flutter性能对比
  • 每周靶点分享:Angptl3、IgE、ADAM9及文献分享:抗体的多样性和特异性以及结构的新见解
  • 从代码学习深度学习 - 单发多框检测(SSD)PyTorch版
  • Comfyui 与 SDwebui
  • C++内存管理与模板初阶详解:从原理到实践