Rewrite
概述
1、作用:重写 URL
2、Nginx 服务器 Rewrite 实现依赖于 PCRE 支持,在编译安装 Nginx 服务器之前,需要安装 PCRE 库
3、Nginx 使用 ngx_http_rewrite_module 模块,解析、处理 Rewrite 功能的相关配置
4、地址重写、地址转发
(1)地址重写,浏览器地址会发生变化;地址转发,浏览器地址不会发生变化
(2)一次地址重写会产生两次请求,一次地址转发只会产生一次请求
(3)地址重写的页面,必须是一个完整的路径;而地址转发则不需要
(4)地址重写因为是两次请求,所以 request 范围内属性不能传递给新页面,地址转发因为是一次请求,所以可以传递值
(5)地址转发速度快于地址重写
Rewrite 规则
1、set
(1)设置一个新的变量
(2)语法
set $variable value;
(3)位置:server、location、if
(4)variable:变量的名称,该变量名称要用 $ 作为变量的第一个字符,且不能与 Nginx 服务器预设的全局变量同名
(5)value:变量的值,字符串、其他变量、变量组合等
Rewrite 常用全局变量 | 说明 |
$args | 请求 URL 中的请求指令,功能和 $query_string 一样 |
$http_user_agent | 用户访问服务的代理信息(如果通过浏览器访问,记录的是浏览器的相关版本信息) |
$host | 访问服务器的 server_name 值,即所访问的 IP地址 |
$document_uri | 当前访问地址的 URI,功能和 $uri 一样,即 location 后的值 |
$document_root | 当前请求对应 location 的 root 值,如果未设置,默认指向 Nginx 自带 html 目录所在位置 |
$content_length | 请求头 Content-Length 值 |
$content_type | 请求头 Content-Type 值 |
$http_cookie | 客户端 Cookie 信息 |
$limit_rate | Nginx 服务器对网络连接速率的限制,即 Nginx 配置中对 limit_rate 指令设置的值,默认是 0,不限制 |
$remote_addr | 客户端 IP 地址 |
$remote_port | 客户端与服务端建立连接的端口号 |
$remote_user | 客户端的用户名,需要有认证模块才能获取 |
$scheme | 访问协议 |
$server_addr | 服务端的地址 |
$server_name | 客户端请求到达的服务器的名称 |
$server_port | 客户端请求到达服务器的端口号 |
$server_protocol | 客户端请求协议的版本,如:HTTP/1.1 |
$request_body_file | 发给后端服务器的本地文件资源的名称 |
$request_method | 客户端的请求方式,如:GET、POST 等 |
$request_filename | 当前请求的资源文件的路径名 |
$request_uri | 当前请求 URI,并且携带请求参数,等价于 |
(6)通过 log_format 指令,上述参数可以在日志文件中使用
2、if
(1)支持条件判断,并根据条件判断结果选择不同 Nginx 配置
(2)语法
if (condition){
}
(3)位置:server、location
3、判定条件(condition)
(1)变量名:如果变量名对应的值,为空字符串或 0,if 都判断为 false,其他条件为 true
if ($param){
}
(2)使用 = 和 !=,比较变量和字符串是否相等,满足条件为 true,不满足为 false
(3)字符串不需要添加 "",并且 = 和 != 前后需要加空格
(4)使用正则表达式对变量进行匹配,匹配成功返回 true,否则返回 false
(5)变量与正则表达式之间使用 ~、~*、!~、!~* 连接
(6)~:代表匹配正则表达式过程中区分大小写
(7)~*:代表匹配正则表达式过程中不区分大小写
(8)!~ 和 !~* 取相,如果匹配返回 false,不匹配返回 true
(9)正则表达式字符串一般不需要加 "",但若字符串中包含 } 或 ; 等字符时,就需要把引号加上
(10)判断请求的文件是否存在,使用 -f 和 !-f
if (-f $request_filename){
#判断请求的文件是否存在
}
if (!-f $request_filename){
#判断请求的文件是否不存在
}
(11)判断请求的目录是否存在,使用 -d 和 !-d
(12)判断请求的目录或者文件是否存在,使用 -e 和 !-e
(13)判断请求的文件是否可执行,使用 -x 和 !-x
4、break
(1)中断当前相同作用域中,其他 Nginx 配置
(2)与该指令处于同一作用域 Nginx 配置中,位于它前面的指令配置生效,位于后面的指令配置无效,并且终止当前的匹配,把当前 URI 在本 location 进行重定向访问处理
(3)语法
break;
(4)位置:server、location、if
5、return
(1)完成对请求的处理,直接向客户端返回
(2)在 return 之后,所有 Nginx 配置都是无效的
(3)语法
return code [text];
return code URL;
return URL;
(4)位置:server、location、if
(5)code:返回给客户端的 HTTP 状态代理,可以返回的状态代码为 0 ~ 999 的任意 HTTP 状态代理
(6)text:返回给客户端的响应体内容,支持使用变量
(7)URL:返回给客户端的 URL 地址
6、rewrite
(1)通过使用正则表达式,改变 URI
(2)可以同时存在一个或者多个指令,按照顺序依次对 URL 进行匹配和处理
(3)语法
rewrite regex replacement [flag];
(4)位置:server、location、if
(5)regex:匹配 URI 的正则表达式
(6)replacement:匹配成功后,用于替换 URI 中匹配 regex 内容的字符串,如果该字符串以 http:// 或 https:// 开头,则不会继续向下对 URI 进行其他处理,而是直接返回重写后的 URI 给客户端
(7)flag:设置 rewrite 对 URI 处理行为,可选值如下
(8)last:终止继续在本 location 块中处理接收到的 URI,并将此处重写的 URI 作为一个新 URI,使用各 location 块进行处理,该标志将重写后的 URI,重新在 server 块中执行,为重写后的 URI 提供转入到其他 location 块的机会
(9)break:将此处重写的 URI 作为一个新的 URI,在本 location 块中继续进行处理,该标志将重写后的地址,在当前 location 块中执行,不会将新的 URI 转向其他 location 块
(10)redirect:将重写后的 URI 返回给客户端,状态码为 302,指明是临时重定向 URI,主要用在 replacement 变量不是以 http:// 或 https:// 开头的情况
(11)permanent:将重写后的 URI 返回给客户端,状态码为 301,指明是永久重定向 URI,主要用在 replacement 变量不是以 http:// 或 https:// 开头的情况
7、rewrite_log
(1)配置是否开启 URL 重写日志的输出功能
(2)语法
rewrite_log on|off;
(3)默认值
rewrite_log off;
(4)位置:http、server、location、if
(5)开启后,URL 重写的相关日志,将以 notice 级别输出到 error_log 指令配置的日志文件汇总
rewrite 应用
1、域名跳转 / URL 转发
(1)将一个域名指向到另外一个已存在的站点
(2)URL 转发服务,实现多个域名指向一个网站或网站子目录
2、域名镜像
(1)镜像网站:将一个完全相同的网站,分别放置到几台服务器上,并分别使用独立 URL 进行访问
(2)其中一台服务器上的网站叫主站,其他为镜像网站,镜像网站和主站没有太大区别,可以把镜像网站理解为主站的一个备份节点
(3)通过镜像网站,提供网站在不同地区的响应速度、平衡网站的流量负载、解决网络宽带限制、封锁等
3、独立域名
(1)一个完整的项目包含多个模块,为每一个模块设置独立的域名
4、合并目录
(1)搜索引擎优化:利用搜索引擎的搜索规则,提高目的网站在有关搜索引擎内排名
(2)URL 目录层级一般不要超过三层
5、完善防盗链
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战