目录
在 Nginx 中,rewrite 指令用于重写 URL。通过使用 rewrite 指令,您可以修改客户端请求的 URL,并将其重定向到不同的位置或处理逻辑。
一.rewrite 指令可以用于以下几个方面:
-
重定向:您可以使用 rewrite 指令将一个 URL 重定向到另一个 URL。例如,您可以将所有对某个特定路径的请求重定向到另一个网址。
-
URL 美化:有时候,为了提供更友好的 URL 结构,您可以使用 rewrite 指令将复杂的或包含参数的 URL 重写成更简洁的形式。这有助于提高用户体验和搜索引擎优化(SEO)。
-
路径处理:rewrite 指令可以用来改变 URL 中的路径,包括添加、删除或修改路径中的一部分。这对于在 Nginx 中进行 URL 路由和路由转发非常有用。
-
内部重定向:使用 rewrite 指令,您可以将请求的 URL 内部重定向到不同的 Nginx 位置(location),以实现不同的处理逻辑或代理到后端服务器。
-
条件重写:您可以结合 rewrite 指令和 if 指令,根据特定的条件对 URL 进行重写。例如,如果满足某个条件,您可以将请求的 URL 重写为另一个 URL。
URL:就是一个具体的路径或者位置
PRI:指的是一个拥有相同的类型/特性的对象集合
URN:用名称做定位 比如用姓名+身份证去找一个人
二rewrite实际场景
1.nginx跳转需求的实现方式
使用rewrite进行匹配跳转 防盗链
使用if匹配全局变量后跳转 不是centos系统的全局变量 而是nginx服务本身的全局变量
使用location匹配在跳转 匹配访问的url路径可以匹配本地的重写以及跨服务器的跳转
2rewrite放在server{} if{} location{}中 if可以放在server 也可以放在location中
location只对域名后面的子符串起作用 www.baidu.com/ 只对/后面的起作用
3.对域名或参数字符串
使用if全局变量匹配
使用proxy pass反向代理
三.rewrite命令语法
1.flag标记的说明
last: 相当于apache的L标记 表示完成rewrite 一般用在server和if中
break 本条规则匹配完成后终止,不在匹配后面的任何规则 一般在location中
redirect 返回302临时重定向,浏览器会显示跳转后的url地址,爬虫不会更新url
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的url地址爬虫更新url
四location的分类
location大致分为三类
精准匹配 location = / {...} 例如location=hou www.jiji.com/hou只匹配这个
一般匹配 location / {...} 例如 location / {...} 匹配 www.jiji.com/date www.jiji.com/o/ko
www.jiji.com/hou/pop/popp 他都会匹配
正则匹配 location ~/{...}
五rewrite案例
1.公司更改域名旧域名不能废除要使用新域名
旧域名www.hou.com改成新域名www.pohou.com
在服务器nginx/conf上改配置文件
进入/etc/hosts 改映射地址
改完之后重启服务 检查配置文件有没有错
验证打开虚拟机浏览器 输入www.hou.com/*
2.旧域名跳转到新域名后面加目录
比如访问http://www.hou.com/post 都要跳转到http://www.pohou.com/bbs/post
进入/bbs/post目录中创建一个html网页
进入/etc/hosts里面
验证进入虚拟机
注意输入的是www.hou.com/post/1.html
六 总结:
1.location的分类
精准匹配 location=ppo {}
一般匹配 location pall {}
正则匹配 location ~pall {}
2.location的匹配优先级
首先看优先级 精确>前缀>正则>一般>通用
优先级相同 正则看上下顺序上面的优先,一般匹配看长度,最长的优先
最后看通用匹配 一般匹配
3.location和rewrite比较
相同点 都能实现跳转
不同点 rewrite是在同一域名内更改获取资源的路径
location 是对路径做控制访问或反向代理
rewrite写在location中执行的顺序
首先执行server模块中的rewrite指令
在执行location匹配
最后执行location中的rewrite指令