Nginx重定向

Nginx重定向

可以使用Nginx来设置重定向,Nginx有两种设置重定向方式

  • return形式
  • rewrite形式

return形式

表示结束规则的执行,并返回状态码给客户端

复制代码
#以下三种都可以
return code;
return url;
return code url;

示例:

复制代码
#301表示永久重定向  302表示临时重定向
return 301 http://baidu.com

rewrite形式

将某个URL重写成特定URL

示例:

复制代码
# rewrite regex replacement flag
rewrite ^/$ http://baidu.com permanent

#正则语法
* :代表前面0或更多字符
+ :代表前面1或更多字符
?:代表前面0或1个字符
^ :代表字符串的开始位置,必须以^后的字符串开头
$ :代表字符串结束位置,必须以$前的字符串结尾
. :通配符,匹配任意字符
[ ] :匹配指定字符集内的任意字符
[^ ] :匹配任何不包括在指定字符集内的任意字符串
| :匹配 | 之前或之后的实体
() :分组,组成一组用于匹配的实体,通常会有|来协助

对于replacement重写的地址,rewrite指令接收到的是URI,并不包含域名、ip、端口、协议等,且不包含地址栏中的参数,replacement就是匹配成功后用于替换URI中被截取的字符串,如果该字符串由http://或https://开头,则不会对URI进行其他处理,而是直接将重写后的URI返回给客户端

最后一项为flag,有以下几种选择

  • last 表示完成rewrite,停止处理后续rewrite指令集,然后对当前重写的新url在rewrite指令集上继续进行规则匹配
  • break 将重写后的URI继续匹配该location块中的后续操作,本条location规则匹配完成,终止匹配,不再匹配后面其他location的规则
  • redirect 返回302临时重定向,将重写后的URI返回给客户端,地址栏会显示跳转后的地址
  • parmanent 返回301永久重定向,将重写后的URI返回给客户端,地址栏会显示跳转后的地址

last和break两者很像,但是使用alias指令时必须使用last,使用proxy_pass时必须使用break,last在本条rewrite执行之后,会对其所在的server{}重新发起请求,而break在本条rewrite执行之后,则会终止匹配

复制代码
# 对于这种情况一定要用break,如果使用last,会造成死循环
location /cms/ {
	proxy_pass http://test.cms.com;
	rewrite "^/cms/(.*)\.html" /cms/index.html break;
}
rewrite_log
复制代码
# 用于开启URL重写日志
rewrite_log on | off

https://zhhll.icu/2021/服务器/Nginx/11.Nginx重定向/

本文由mdnice多平台发布

相关推荐
CHENWENFEIc10 小时前
SpringBoot论坛系统安全测试实战报告
spring boot·后端·程序人生·spring·系统安全·安全测试
Yo_Becky14 小时前
【PyTorch】PyTorch预训练模型缓存位置迁移,也可拓展应用于其他文件的迁移
人工智能·pytorch·经验分享·笔记·python·程序人生·其他
旧曲重听119 小时前
最快实现的前端灰度方案
前端·程序人生·状态模式
自由鬼12 天前
企业架构与IT架构关系的探讨
程序人生·安全·架构·安全架构·企业架构·it架构
ProcessOn官方账号14 天前
数据分析对比图表-雷达图全面指南
大数据·人工智能·程序人生·职场和发展·数据分析·学习方法·processon
南国_之恋14 天前
程序人生,人生如戏
程序人生·职场和发展
TGC达成共识15 天前
解锁身心密码:从“心”拥抱健康生活
科技·物联网·程序人生·百度·生活·新浪微博·高考
宇钶宇夕16 天前
博图SCL中CONTINUE语句详解:高效循环控制案例
运维·程序人生·算法·自动化
zhangxiaolong01018 天前
我关于汽车的一些看法
程序人生
测试界萧萧18 天前
10:00开始面试,10:06就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展