目录
一、Nginx Rewrite
二、Rewrite功能
Rewrite跳转场景
Rewrite跳转实现
Nginx
跳转
pcre支持
重写模块
Rewrite实际场景
Rewrite命令/语法格式
flag标记说明
location分类
location优先级
rewrite和location相比
三、跳转案例
实现域名跳转
第一步 修改指定配置文件
第二步 检查语法错误
第三步 有报错进行排错
第四步 添加域名映射关系
第五步 重启服务
第六步 测试结果
旧域名跳转新域名
第一步 修改配置文件
第二步 添加域名映射关系
第三步 重启服务
第四步 创建网页执行文件
第五步 用浏览器进行测试
第六步 处理错误(排错)
第七步 重新测试访问
基于参数进行匹配跳转
第一步 修改配置文件
第二步 检查语法错误
第三步 重启服务
第四步 设置映射关系
第五步 用浏览器进行测试
基于客户端IP地址访问跳转
第一步 修改配置文件
第二步 检测文件语法问题
第三步 创建网页返回执行文件
第四步 重启服务
第五步 用浏览器进行访问测试
基于目录下PHP文件进行跳转
第一步 修改配置文件
第二步 检查文件语法问题
第三步 重启服务
第四步 用浏览器进行测试
基于普通的RUL进行请求跳转
第一步 修改配置文件
第二步 检查是否存在语法问题
第三步 重启服务
第四步 用浏览器进行访问测试
一、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