一、Nginx Rewrite
Rewrite主要的功能是实现URL重写,Nginx 的 Rewrite 规则采用 PCRE Perl 兼容正则表达式的语法进行规则匹配,如相使用 Nginx 的 Rewrite 功能,在编译 Nginx 前要编译安装 PCRE 库。Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。
rewrite和location的功能有点相像,都能实现跳转,主要区别在于rewrite常用于同一域名内更改获取资源的路径,而location是对一类路径做控制访问和反向代理,可以proxy_pass到其他服务器。
Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
rewrite只能放在server{},location{},if{}中,
并且只能对域名后边的除去传递的参数外的字符串起作用。
二、Rewrite功能
① Rewrite跳转场景
② Rewrite跳转实现
③ Rewrite实际场景
④ Rewrite正则表达式(用于匹配URL)
⑤ Rewrite命令/语法格式
⑥ location分类
⑦ location优先级
⑧ Rewrite和location做比较
⑨ 根据以上来实现跳转
Rewrite跳转场景
① URL看起来更规范、合理
② 企业会将动态URL地址伪装成静态地址提供服务
③ 网址换新域名后,让旧的访问跳转到新的域名上
④ 服务端某些业务跳转
URL访问跳转, 支持开发设计
① 页面跳转 ② 兼容性支持 ③ 展示效果
SEO优化
维护
① 后台维护 ② 流量转发
安全
① 伪静态页面
Rewrite跳转实现
Nginx
支持URL重写、支持if条件判断
但不支持else的命令执行
跳转
循环最多可以执行10次
超过后nginx将返回500的错误
pcre支持
rewrite使用Nginx全局变量或者自己设置的变量
结合正则表达式和标志位实现URL重写以及重定向
重写模块
set指令
以上全部都基于
ngx_http_rewrite_module模块
Rewrite实际场景
① Nginx跳转需求的实现方式
使用rewrite进行匹配跳转(防盗链)
使用if匹配全局变量后跳转(Nginx自身的全局变量,不是系统的全局变量)
location可以匹配本地重写以及跨服务器跳转
② rewrite放在server{}、if{}、location{}模块段中
location只对域名后边的出去传参的字符串起作用
③对域名或者参数字符串
用if全局变量匹配
使用proxy_pass反向代理
Rewrite是在同一域名内更改获取资源的路径
location本身就是一种路径资源
Rewrite命令/语法格式
命令语法:rewrite [正则] [跳转后的内容] [rewrite支持的flag标记];
flag标记说明
last (相当于Apache的[L]标记,表示完成rewrite)一般用于Server和if当中
break (本条规则匹配完成即终止,不再匹配后面的任何规则)一般用于location
redirect (返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新URL)
permanent (返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫会更新URL)
break和last类似 但break不会重新发起一次处理过程,而是直接返回处理结果
redirect 该标记表示当前规则匹配成功后立即进行重定向操作
permanent 该标记和redirect类似,但是永久重定向
set 标记表示当前规则匹配成功设置一个变量,并把变量传入下一跳规则
location分类
location = [字符串]{} #精准匹配
location [字符串]{} #一般匹配
location [字符串]{} #正则匹配
~ #执行一个正则匹配,区分大小写
~* #不区分大小写
!~ #区分大小写取反
!~* #不区分大小写取反
^~ #普通字符匹配,使用前缀匹配,如果匹配成功则不再进行其他匹配
= #普通字符,精准匹配
@ #定义一个命名的location,使用在内部定义
location优先级
优先匹配精确匹配(=)
其次前缀匹配(^~)
其次再按照文件中顺序的正则匹配(或者*)
然后匹配不带任何修饰的前缀匹配(常规字符串匹配)
通用匹配(/)如果没有其他匹配,任何请求都可以符合匹配
执行顺序
精确 > 前缀 > 正则 > 一般 > 通用
优先级相同的情况下,执行顺序由上到下按顺序执行
rewrite和location相比
都可以实现跳转(相同点)
rewrite是在同一个域名内更改获取资源的路径
location是对一类路径做控制访问或者反向代理,还可以proxy_pass到其他机器
rewrite会写在location里(按顺序执行)
执行Server块里面的rewrite指令
执行location匹配
执行选定的location中的rewrite指令
三、跳转案例
实现域名跳转
首先要先关闭防火墙和安全机制
第一步 修改指定配置文件
修改指定用户Nginx
首先要有nginx的程序用户
cat /etc/passwd #查看是否有nginx用户,是否是程序用户
修改对应域名(自定义即可)
修改指定的日志文件,后面的main可加可不加
添加域名重定向
第二步 检查语法错误
保存并退出
nginx -t #检查是否有语法问题
第三步 有报错进行排错
这里找不到日志
无法识别到日志格式
接着进入配置文件
再次保存并退出
再次查看是否有错误
手动创建日志文件
并且进行赋权
第四步 添加域名映射关系
修改域名解析
vim /etc/hosts
第五步 重启服务
重启服务
systemctl restart nginx
第六步 测试结果
用浏览器进行访问测试
查看网页元素
详细信息的网址和状态码
旧域名跳转新域名
第一步 修改配置文件
第二步 添加域名映射关系
第三步 重启服务
命令:systemctl restart nginx
第四步 创建网页执行文件
第五步 用浏览器进行测试
我们跳转成功
但是网页内没有内容
跳转可以正常跳转但不显示网页内容
第六步 处理错误(排错)
第七步 重新测试访问
基于参数进行匹配跳转
第一步 修改配置文件
第二步 检查语法错误
命令:nginx -t
第三步 重启服务
命令:systemctl restart nginx
第四步 设置映射关系
命令:vim /etc/hosts
第五步 用浏览器进行测试
基于客户端IP地址访问跳转
第一步 修改配置文件
第二步 检测文件语法问题
命令:nginx -t
第三步 创建网页返回执行文件
第四步 重启服务
命令:systemctl restart nginx
第五步 用浏览器进行访问测试
基于目录下PHP文件进行跳转
第一步 修改配置文件
第二步 检查文件语法问题
命令:nginx -t
第三步 重启服务
命令:systemctl restart nginx
第四步 用浏览器进行测试
基于普通的RUL进行请求跳转
第一步 修改配置文件
第二步 检查是否存在语法问题
命令:nginx -t
第三步 重启服务
命令:systemctl restart nginx
第四步 用浏览器进行访问测试
版权归原作者 Liu_Fang_Hong 所有, 如有侵权,请联系我们删除。