如何应用Nginx Rewrit实现网页跳转

news2024/10/4 10:32:41

目录

一、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

第四步 用浏览器进行访问测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文详解gRPC框架

目录 RPC框架简介 简介 各种序列化协议优缺点 gRPC调用模式 gRPC跟ProtocolBuffers的关系 ProtocolBuffers协议 gRPC桩代码生成 gRPC线程模型 gRPC分层 gRPC开发经验 官网及快速开始 常见状态码 适用场景 适用 不适用 手写简易RPC框架 Dubbo学习笔记 一文详解…

【python】数据表转csv

文章目录 1 基本结构1.1 数据1.2 数据结构 2 代码3 tip 1 基本结构 1.1 数据 1.2 数据结构 2 代码 代码: import mysql.connector import csvdef getPerson():# 数据库初始化cnx mysql.connector.connect(userroot, passwordroot, databasetest)cursor cnx.cur…

IDEA启动tomcat控制台中文乱码问题

IntelliJ IDEA是很多程序员必备且在业界被公认为最好的Java开发工具,有很多小伙伴在安装完IDEA并且tomcat之后,启动tomcat会出现控制台中文乱码问题,如下图所示: 具体解决步骤: 一、修改当前 Web 项目 Tomcat Server…

SAP ALV批量修改列的数据

导语:最近在给ALV增加批量修改列的功能,需求是修改多列,以前经常自己画屏幕来实现,研究了一下,SAP有标准的函数,可以自动带出选择列的字段属性,搜索帮助等等,大大提高了便捷性。 函…

本地同步远程yum源,并保存到本地

1.修改本地/etc/yum.repos.d/内容为远程yum repo配置; # 1).备份原yum配置 mkdir -p /home/yum-bak && mv /etc/yum.repos.d/* /home/yum-bak/* # 2).修改目标yum配置 2.执行缓存,查看相关repoid是否正确 yum clean all …

QT学习笔记2--对象树

对象树 可以看到QWidet这几个类的父亲是QObject,在析构的时候是从下往上析构。 实例 创建类 验证的话,要先创建一个类,命名为pushbotton。 点击choose创建,类。 编写相关函数 构造函数 pushbotton::pushbotton(QWidget *pare…

华为云专家出品《深入理解边缘计算》电子书上线

华为开发者大会PaaS生态电子书推荐,助你成为了不起的开发者! 什么是边缘计算?边缘计算的应用场景有哪些? 华为云出品《深入理解边缘计算》电子书上线 带你系统理解云、边、端协同的相关原理 了解开源项目的源码分析流程 学成能…

【Python】字符串格式化前世今生

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ 《%》方式格式化语法%后面的参数说明 2️⃣ str.format优点指定位置:参数可以不按顺序关键字参数列表索引对象数字格式化 3️⃣ f-string 语法语法示例格式化一个表达式转义符号格式化 datetime 对象 🛬 结…

C#传Bitmap到C++dll出现灰色图片的问题

如果直接将内存中的Bitmap 传给C,原图会失去颜色,如下: 代码如下: ImageCodecInfo jpgEncoder GetEncoder(ImageFormat.Jpeg);System.Drawing.Imaging.Encoder myEncoder System.Drawing.Imaging.Encoder.Quality;EncoderParameters myEncod…

给若依添加单元测试(二)

给若依添加单元测试 方案一(简单) 方案二(异常困难但企业开发一般用这个) 在 activity 子模块中添加单元测试 S1.在 src 目录下创建 test.java.MapperTests 文件 S2.将以下内容复制进去 import com.ruoyi.activity.Activity…

C#私有构造函数学习

私有构造函数是一种特殊的实例构造函数。 它通常用在只包含静态成员的类中。 如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。 如果类T只声明了私有实例构造函数,则在T的程序文本外…

java项目之留学生交流互动论坛网站ssm源码

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的留学生交流互动论坛网站。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者&#xf…

python编码中常见问题及解决方案

文章目录 1. 输入minVal和maxVal,将 minVal - maxVal 分成 N 等份,列表返回2. request 请求MP4视频URL时,如何获取视频大小3. 输出00,01,02或001,002,003等格式字符串 1. 输入minVal和maxVal&am…

UE5 Stride Warping Orientation Warping功能学习

在UE5的 Lyra Demo中,运用到了各类动画Warping(动画扭曲)技术,通过各类Warping节点在动画蓝图中的合理组织,可以有效的解决运动滑步问题,并为动画增添更多细节。 本文主要基于Animation Warping插件讲一下…

vue echarts k线图 标记点根据条件设置颜色

1. 数据格式{属性1, 属性2, 属性3, 属性4{属性4.1, 属性4.2, 属性4.3}} {symbol: circle, symbolSize: 0,xAxis: 2023-01-01 08:36:00, yAxis: 0.06968924, label: {fontStyle: normal, fontSize: 13, color: blue} } 2. 自定义局部function 拼装数据 // data 是 自定义标记点…

element-ui el-tree功能应用

1.目录节点搜索功能&#xff1a; <el-tree>:filter-node-method"filterNode"</el-tree>//添加监听watch: {search(val) {this.$refs.tree.filter(val)}},// 树搜索filterNode(value, data) {if (!value) return truereturn data.name.indexOf(value) ! -…

安装MySQL实现远程访问链接---无需本地访问

文章目录 1. 安装Mysql2. 安装phpMyAdmin3. 修改User 表4. 本地测试连接5. 安装cpolar6. 配置公网访问地址7. 固定连接公网地址 转载自cpolar极点云文章&#xff1a;群晖NAS 安装 MySQL远程访问连接 群晖安装MySQL具有高效、安全、可靠、灵活等优势&#xff0c;可以为用户提供一…

mysql索引之B+树

1.概述 提到B树就不得不提及二叉树&#xff0c;平衡二叉树和B树这三种数据结构了。B树就是从他们三个演化来的。众所周知B树是一种常见的数据结构&#xff0c;被广泛应用于数据库和文件系统等领域&#xff0c;B树的设计目标是保持树的平衡性&#xff0c;以提供稳定的性能&…

磐石呼叫中心系统经常被UDP攻击的解方法

语音系统经常被UDP攻击&#xff0c;UDP攻击是一种常见的网络攻击形式&#xff0c;经常针对语音、视频和在线游戏等实时传输数据的应用程序。攻击者使用大量的UDP数据包向目标服务器发送请求&#xff0c;导致服务器过载&#xff0c;使其无法处理有效的请求&#xff0c;从而导致服…

01-基本数据类型和注释

基本数据类型 使用编程语言进行编程时&#xff0c;需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着&#xff0c;当您创建一个变量时&#xff0c;就会在内存中保留使用一些空间。 您可能需要存储各种数据类型&#xff08;比如字符型、整型、浮…