网站首页 > 技术教程 正文
Rewrite主要的功能是实现URL重写,Nginx 的 Rewrite 规则采用 PCRE Perl 兼容正则表达式的语法进行规则匹配,如果使用 Nginx 的 Rewrite 功能,在编译 Nginx 前要编译安装 PCRE 库。Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。
rewrite介绍
rewrite和location的功能有点相像,都能实现跳转,主要区别在于rewrite常用于同一域名内更改获取资源的路径,而location是对一类路径做控制访问和反向代理,可以proxy_pass到其他服务器。
Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
rewrite只能放在server{},location{},if{}中,
并且只能对域名后边的除去传递的参数外的字符串起作用。
rewrite语法
指令语法: rewrite regex(正则) replacement(替代内容) [flag](flag标记)
关键字:rewrite是实现URL重写的关键指令,不变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
应用位置:server、location、if
例子
rewrite ^/(.) http://www.suibibk.com/$1 permanent;
说明:
rewrite为固定关键字,表示开始进行rewrite匹配规则
regex部分是 ^/(.) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是http://www.suibibk.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.suibibk.com/$1 地址上
假设我们再nginx如下进行配置
server {
listen 80;
server_name localhost;
rewrite ^/(.*) http://www.suibibk.com/$1 permanent;
...
}
当我们访问:http://192.168.192.11/hello/a/b?id=12345 的时候,就会自动重定向到https://www.suibibk.com/hello/a/b?id=12345
我们也可以用if条件判断,符合if条件判断的才进行处理
server {
listen 80;
server_name localhost;
if ( $host != 'www.suibibk.com' ) {
rewrite ^/(.*) http://www.suibibk.com/$1 permanent;
}
...
}
if指令可以使用的全局变量
$args: #这个变量等于请求行中的参数,同$query_string
$content_length: 请求头中的Content-length字段。
$content_type: 请求头中的Content-Type字段。
$document_root: 当前请求在root指令中指定的值。
$host: 请求主机头字段,否则为服务器名称。
$http_user_agent: 客户端agent信息
$http_cookie: 客户端cookie信息
$limit_rate: 这个变量可以限制连接速率。
$request_method: 客户端请求的动作,通常为GET或POST。
$remote_addr: 客户端的IP地址。
$remote_port: 客户端的端口。
$remote_user: 已经经过Auth Basic Module验证的用户名。
$request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme: HTTP协议(如http,https)。
$server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name: 服务器名称。
$server_port: 请求到达服务器的端口号。
$request_uri: 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri: 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri: 与$uri相同。
rewrite 中常用的正则
. 匹配换行符以外任意字符
? 重复0次或者1次
+ 重复1次或多次
* 重复0次或者多次
\d 匹配数字
^ 匹配开始
$ 匹配结束
{n} 重复 n 次
{n,} 重复 n 次或更多次
[c] 匹配单个字符c
[a-z] 匹配 a-z 任意一个小写字母
使用 () 可以将匹配内容括起来,后面使用 $1 来引用,当然,第二个 () 就是 $2。
rewrite应用场景
可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com
根据特殊变量、目录、客户端的信息进行URL调整等
例子实战:让短连接更短
背景:我们公司前端框架用的是struts2,并且是很老的一个框架,请求格式大概是这样:https://www.suibibk.com/u!u.do?u=ke469i57m ,然后运营就说这个短连接还是太长了,有没有办法再变短,比如变为:https://www.suibibk.com/u/ke469i57m
这怎么办呢,struts2又不支持这种格式,并且两个链接都是可以用的,正常用长的就够了!
解决方案,通过rewrite重新
if ( $request_uri ~ /u/ ){
rewrite ^/(u)/(.*) https://www.suibibk.com/u!u.do?u=$2 permanent;
}
完美解决!
注:$1和$2对应的就是前面的正则括号,比如上面$2对应的就是https://www.suibibk.com/u/ke469i57m 中的ke469i57m
if语句中的判断条件
正则表达式匹配:
==:等值比较;
~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;
~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;
!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;
!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;
猜你喜欢
- 2024-09-09 「Nginx」Web/代理服务器的瑞士军刀:重写与定位
- 2024-09-09 ingress-nginx常用注解指南(nginx详细讲解)
- 2024-09-09 Nginx反向代理常用配置(nginx反向代理设置)
- 2024-09-09 nginx+springboot使用https重定向的解决办法
- 2024-09-09 Nginx从0基础到进阶实战!运维工程师必看
- 2024-09-09 深度|掌握Nginx监控运维,这一篇足矣!
- 2024-09-09 详解nginx配置location总结及rewrite规则写法
- 2024-09-09 nginx 使用技巧配置(nginx 配置详解)
- 2024-09-09 详解 Nginx配置静态内容服务器|附案例说明
- 2024-09-09 精品推荐!超简单Nginx开启SSL与重定向优化
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)