目录

  • 一、Nginx跳转的实现方式
    • 一、rewrite概述
      • 一、rewrite跳转实现
      • 二、常用的Nginx正则表达式
      • 三、rewrite的优先级
      • 四、rewrite的flag标记
    • 二、location匹配
      • 一、location分类
      • 二、location常用匹配规则
      • 三、location优先级
      • 四、location的实际使用
    • location和rewrite的区别
  • 实例
    • 一、基于域名跳转
    • 二、基于客户端ip地址跳转
    • 三、基于旧域名跳转到新域名后的加目录
    • 四、基于参数匹配(多余的)的跳转
    • 五、基于目录下所有PHP结尾的文件跳转
    • 六、基于最普通的一条url

一、Nginx跳转的实现方式

1、使用rewrite进行匹配跳转
2、if匹配全局变量跳转
3、使用location匹配在跳转

一、rewrite概述

rewrite 功能就是:使用 nginx 提供的全局变量或自己设置的变量,结合正则表达式和标记位实现 URL(我们访问的完整域名+路径) 重写以及重定向

一、rewrite跳转实现

①Nginx:支持URL重写、支持if条件判断(通过布尔值判断,成立为true,不成立为false),不支持else
②跳转:location跳转下一个location,循环最多10次,超过后Nginx将返回500错误
③PCRE支持:Perl兼容正则表达式的语法规则匹配
④重写模块set指令:创建新的变量并设定其值

二、常用的Nginx正则表达式

^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次
+ :匹配前面的字符一次或多次
? :匹配前面的字符零次或一次
. :匹配除“\n(回车)”之外的任何单个字符
\ :转义符,将后面的字符标记为一个特殊字符或一个原义字符或一个向后引用。
\d : 匹配春数字
\w :匹配字母或数字或下滑线或汉字
\s :匹配任意的空白符
\b :匹配单词的开始或结束
{n} :重复n次
{n,} :至少重复n次
{n,m} :重复n到m次
() :表达式的开始和结束位置
| : 或运算符
[]:定义匹配的字符范围
[n] :匹配单个字符n
[a-z0-9A-Z] :匹配所有大小写字母或数字

三、rewrite的优先级

1、server模块里面的rewrite指令
2、选定的location中的rewrite指令
3、选定的location中if中的rewrite指令

四、rewrite的flag标记

last:本条规则匹配完成后,继续向下匹配新的location URL规则,一般用在server和if中
break:本条规则匹配完成即终止,不在匹配后面的任何规则,一般用在location中
redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
permanent:返回301永久重新向,浏览器地址栏会显示跳转后的URL地址
last与break的区别:
last:终止当前location的rewrite检测,还会继续重试location匹配并处理区块中的rewrite规则
break:终止当前location的rewrite检测,不再进行location匹配

二、location匹配

一、location分类

精准匹配:location = / {…}
一般匹配:location / {…}
正则匹配:location ~ / {…}

二、location常用匹配规则

= :进行普通字符精准匹配(完全匹配)
^~ :表示普通字符匹配,使用前缀匹配。匹配成功,则不再匹配其他location
~ :区分大小写匹配
~* :不区分大小写匹配
!~ :区分大小写匹配取非
!~* :不区分大小写匹配取非
@ :定义一个location,使用在内部定向的时候

三、location优先级

匹配文件:
(location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) > (location ~ 完整路径) > (location 完整路径) > (location /)
匹配文件的目录:
(location = 完整路径) > (location ^~ 完整路径) > (location ~ 完整路径) > (location ~* 完整路径) > (location 完整路径) > (location /)
相同类型的表达式,字符串长的优先匹配

四、location的实际使用

实际使用至少三个必用规则:
1、直接匹配网站根,通过域名访问网站首页比较频繁,使用这个加速处理。
2、处理静态文件请求(Nginx作为http服务器的强项),匹配模式为目录匹配或后缀匹配。
3、通用规则,如转发.php或.jsp后缀的动态请求到后端应用服务器

location和rewrite的区别

rewrite是对同一域名内更改获取资源的路径
location是对一类路径做控制访问或反向代理,也可以proxy_pass到其他设备

实例

一、基于域名跳转

[root@localhost ~]# vim /etc/hosts

添加映射

[root@localhost ~]# mkdir -p /var/log/nginx/ #创建日志目录
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf进入Nginx主配置文件
server_name  www.xiao.com #修改域名access_log  /var/log/nginx/www.xiao.com-access.log #开启并对日志保存路径进行修改if ($host = 'www.xiao.com'){ #$host为rewrite全局变量,代表请求主机头字段或主机名rewrite ^/(.*)$ http://www.ku.com/$1 permanent; #^/(.*)$表示根后面的目录,$1表示^/(.*)$,permanent永久跳转}
[root@localhost ~]# systemctl stop nginx
[root@localhost ~]# systemctl start nginx

访问www.xiao.com,发现网页跳转到www.ku.com

二、基于客户端ip地址跳转

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

set $rewrite true; #设置变量$rewrite,变量为布尔值true
#判断是否为否合法IP,设定ip192.168.238.150为合法地址,不进行跳转,直接访问
if ($remote_addr = "192.168.238.150"){set $rewrite false;
}
#设定除了合法地址,其他地址访问,跳转至更新页面
if ($rewrite = true){rewrite (.+) /gengxin.html;
}
location = /gengxin.html {root /var/www/html; #网页返回/var/www/html/gengxin.html的内容
}
[root@localhost ~]# mkdir -p /var/www/html/
[root@localhost ~]# echo '<h1>this is gengxin web!</h1>' > /var/www/html/gengxin.html
[root@localhost ~]# systemctl restart nginx

用192.168.238.100访问www.xiao.com跳转到更新页面

用192.168.238.150访问www.xiao.com,正常进入主页

三、基于旧域名跳转到新域名后的加目录

[root@localhost ~]# mkdir -p /usr/local/nginx/html/bbs/post
[root@localhost ~]# echo "<h1> this is 1.html</h1>" > /usr/local/nginx/html/bbs/post/1.html
[root@localhost ~]# echo "192.168.238.150 bbs.ku.com" >> /etc/hosts
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

[root@localhost ~]# systemctl restart nginx

访问www.xiao.com/post/1.html

四、基于参数匹配(多余的)的跳转

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

[root@localhost ~]# systemctl restart nginx

访问www.xiao.com/100-100-12345.html,网页跳转到www.xiao.com

五、基于目录下所有PHP结尾的文件跳转

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

[root@localhost ~]# systemctl restart nginx

访问www.xiao.com/upload/123.php网页转到www.xiao.com

六、基于最普通的一条url

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

[root@localhost ~]# systemctl restart nginx

访问www.xiao.com/abc/123.html,网页跳转到www.xiao.com

小小总结:
location的优先级:
1、精准匹配
2、正则前缀匹配
3、~和~*
4、普通匹配

让人扎心的Nginx rewrite跳转及Location相关推荐

  1. 回顾Nginx rewrite跳转

    @TOC rewrite概述 现在 Nginx 已经成为很多公司作为前端反向代理(proxy_pass)服务器的首选,在实际工作中往往会遇到很多跳转(重写 URL)的需求. 比如:更换域名后需要保持旧 ...

  2. Nginx Rewrite跳转

    1 一. 新旧域名跳转 作用场景:基于域名的跳转,现在公司旧域名:www.peihua.com 有业务需求要变更,需要使用新域名www.zhenguo.com代替,但是旧域名不能废除.需要跳转到新域名 ...

  3. Nginx Rewrite跳转功能

    一.Nginx Rewrite概述 二.Nginx Rewrite基本操作 C 1.基于域名的跳转 2.基于客户端 IP 访问跳转 3.基于旧域名跳转到新域名后面加目录 4.基于参数匹配(多余的)的跳 ...

  4. 扎克伯格说了两句大实话!一句价值1300亿美元,另一句让美国人扎心了…

    △央视财经<国际财经报道>栏目视频 当地时间11号,继前一天出席了参议院听证会后,美国社交媒体公司脸书首席执行官马克·扎克伯格又紧接着出席了美国众议院能源和商务委员会的听证会,就用户数据隐 ...

  5. 测试用例的“真相”与“事实” 这9个事实让人扎心!

    测试用例存在一些真相与事实,有些广为人知,有些却很隐蔽.正是基于这些真相与事实,可以对我们的手工测试.自动化测试.甚至规模化的自动化测试(数以万计的用例)带来不同的启发. 真相1:不能提前确定所需要的 ...

  6. 年薪20万属于什么水平?答案让人扎心!

    百度.奔驰.华为.腾讯.海尔.欧莱雅-等等大厂都纷纷开启了今年的春招. 最近,可以说是招聘的大爆发时期,只是新型肺炎原因,校园.人才市场.企业都将现场招聘改为了线上[无接触招聘].而同学们也是在疯狂投 ...

  7. 原来微信显示“对方正在输入”,还有这样的含义,真的让人很扎心

    如今微信已经是使用人数最多的聊天工具了,并且我们每天都要用微信和朋友聊天,但是你发现了没有,有时候我们在等待对方回消息的时候,聊天框的上方会有"对方正在输入"显示,但几分钟过去了, ...

  8. Nginx Rewrite 和正则表达式

    目录 前言 一.Nginx Rewrite介绍 1. Rewrite 跳转场景 2. Rewrite 跳转实现 3.Nginx跳转需求的实现方式 4.nginx rewrite中的正则表达式 5.re ...

  9. 20幅扎心漫画,道尽无数人的人生!30万网友:这简直是在偷窥我生活...

    全世界只有3.14 % 的人关注了 爆炸吧知识 每个人在这世界上 都是独特的个体 但我们常常在很多方面 把生活过得很类似 在ins上,名叫@Sanesparza的博主 就把生活中的各种细节 通过漫画的 ...

最新文章

  1. U3D-LookAt插值动画
  2. 【收藏】scala创建二维数组并赋值
  3. mysql 存储引擎接口_MySQL体系结构和存储引擎
  4. C# WinForm开发系列 - ToolBar/OutlookBar/Tab/Wizard(转载)
  5. NHibernate初探-SQLDialects
  6. mysql中的shell脚本命令_shell脚本中mysql命令
  7. php 安装rabtmq amqp 扩展
  8. mysqldump备份数据不锁表的加参数方法及原理分析
  9. C语言程序设计线上测试01,2001年C语言程序设计笔试A卷.doc
  10. 这位硬核程序员,想好怎么过春节了吗?
  11. 数字和模拟通信系统 中文版_浏览器指纹欺骗工具-VMLogin中文版是怎么一个反指纹防关联浏览器...
  12. 【笔记】Ubuntu 18.04 安装 PyQt4
  13. java 第十一章 多线程技术
  14. 工资条: EmailSender部分
  15. 一起初学java,笔记记录的第五天:数组、排序和查找
  16. html5 sandbox,”基情“无限的IE10和HTML5
  17. WSL无法访问网络的解决办法
  18. pc端微信小程序抓包
  19. MAT的 thread overview 功能
  20. Learning Spatiotemporal Features with 3D Convolutional Networks 读书笔记

热门文章

  1. 前端面试官怎么问的问题都是原理呢?
  2. JavaPoet 的使用
  3. 【机器学习】机器学习之一元线性回归
  4. linux启动和关闭防火墙命令
  5. TensorRT加速
  6. opengles图像处理之图片锐化处理
  7. 【Java基本数据类型】Long和long的区别
  8. 风云编程python基础语法(6)
  9. 上证50成分股聚类可视化
  10. 机器学习系列(二)——评价指标Precision和Recall