如何应用Nginx Rewrit

news2024/11/17 8:33:01

目录

一、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/695265.html

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

相关文章

Gof23设计模式之原型模式

1.概述 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。 2.结构 原型模式包含一下角色: 抽象原型类:规定了具体原型对象必须实现的clone()方法具体原型类:实现了抽象圆形类的clone()方法…

Opencv 源码编译以及调用相关

查看Ubuntu上面已经安装的opencv的版本 pkg-config --modversion opencv源码编译 源码下载, 注意其中的batch, 选择一致。 git clone https://github.com/opencv/opencv.git # 下面的仓库为第三方库,可以根据需要选择 git clone https://github.com/o…

npm install --save-dev electron报错

报错: 清除一下缓存,并删除掉node_module npm cache clean --force切换cnpm安装 npm install -g cnpm --registryhttps://registry.npm.taobao.org安装electron cnpm i electron --save-d安装成功!

PHP 音乐网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 音乐网站系统 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为PHP APACHE,数据库为 mysql5.0,使用php语言开发。 源码…

为按钮和表单绑定事件常用的两种方式

文章目录 前言一、常用事件二、常用事件绑定方式一三、常用事件绑定方式二四、onsubmit()表单事件特别绑定方式4.1 事件绑定方式一使得onsubmit()真正起效 五、常见事件绑定小Bug绑定事件一不规范引发的Bug绑定事件二不规范引发的Bug 前言 在编写代码时,我们难免需要…

VUE使用v-html解析失败和解决方案

有些时候我们拿到后端返回内容进行v-html解析的时候,会发现解析之后,页面展示的还是html内容,我分析了我遇到的情况,希望能帮到大家。 原因:是因为后端返回数据的时候没有对内容进行html做转义,导致页面输出…

爬虫入门指南:学习爬虫的基础知识和技巧

文章目录 爬虫基础知识什么是爬虫?爬虫的工作原理爬虫的应用领域 爬虫准备工作安装Python安装必要的库和工具 网页解析与XPath网页结构与标签CSS选择器与XPathXpath 语法XPath的基本表达式:XPath的谓语(Predicate):XPa…

数据挖掘与数据分析之统计知识篇

1、自由度是什么?怎么确定? 统计学上,自由度是指当以样本的统计量估计总体的参数时,样本中独立或能自由变化的数据个数叫自由度。一般来说,自由度等于独立变量减掉其衍生量数。举例来说,变异数的定义是样本…

Revit U型墩柱的绘制方法和生成柱方法

一、Revit U型墩柱的绘制方法 这里教大家一个墩柱的绘制步骤,我们采用一级等级考试第八期中的U型墩柱试题来给大家演示绘制步骤。 首先我们要明白这里需要采用族样板来绘制,新建一个族样板打开我们的公制常规模型样板 进入立面绘制题目中所需要的参照先&…

java基础(并发编程)-设计模式~同步模式之保护性暂停

一、同步模式之保护性暂停定义 保护性暂停即Guarded Suspension,用在一个线程等待另一个线程的执行结果。 要点 有一个结果需要从一个线程传递到另一个线程,让他们关联到同一个Guarded Object。如果有结果不断从一个线程到另一个线程,那么…

Covex combination和affine combination

Covex combination和affine combination是两种常见的线性组合方法。 Covex combination(凸组合)是指在线性组合中,所有权重(coefficients)取非负值且总和为1的情况。也就是说,对于给定的一组向量或点集合&…

Linux系统编程:详解进程地址空间

目录 一. 进程空间的布局 二. 进程地址空间 2.1 早期CPU访问物理内存的方式 2.2 什么是虚拟地址(进程地址空间) 2.3 操作系统对地址空间的管理方法 三. 地址空间存在的意义 四. 总结 一. 进程空间的布局 在语言层面学习C/C时,根据变量…

android studio 单独运行java 文件

首先&#xff0c;创建一个新的java文件。 然后&#xff0c;在Test.java文件中写上如图所示的代码。 接下来&#xff0c;我们把目录模式从Android转换成Project。 打开.idea文件夹下的gradle.xml文件。 在gradle.xml文件中添加上红色方框中的内容。 <option name"delega…

MySQL GROUP BY 多个字段的用法说明

MySQL GROUP BY 多个字段的用法说明 1. 说明2. 举例附录 1. 说明 在 mysql 中使用 group by 的意思是分组查询。如果 group by 后面跟的是单个字段&#xff0c;那么表示按照这个字段分组查询&#xff0c;如果 group by 后面跟的是多个字段&#xff0c;那么表示按照这些字段的不…

关于使用idea中遇到给Dependencies没有加入jar包,但是在war_exploded中lib有

lib文件夹无jar包 Dependencies无jar包 war_exploded中存在此jar 原因是在此有jar包 当去掉时

深入解析 css.1.5

❑ 控制选择器的优先级。 ❑ 不要混淆层叠和继承。 ❑ 某些属性会被继承&#xff0c;包括文本、列表、表格边框相关的属性。 ❑ 不要混淆initial和auto值。 initial是一个CSS属性的初始值&#xff0c;它会将属性的值重置为浏览器默认值。例如&#xff0c;如果将background-co…

其实失败才是人生常态,赢者通吃确实存在,但那不代表绝大多数人。

其实失败才是人生常态&#xff0c;赢者通吃确实存在&#xff0c;但那不代表绝大多数人。 &#x1f4e2;今年的就业难度可能是之前5年最难的一年&#xff0c;也有可能是以后5年最好的一年。 &#x1f4e2;&#x1f4e2;疫情的回落&#xff0c;仿佛只带动了旅游业的发展&#x…

在EasyCVR中调用快照接口返回404是什么原因?如何解决?

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;能在复杂的网络环境中将前端设备进行统一集中接入&#xff0c;实现视频资源的汇聚管理、直播鉴权、转码处理、多端分发、智能告警、数据共享等能力与服务。此外&#xff0c;平台也提供了丰富的API接口供用户自由调用、集成…

【XKCD】XKCD 风格的图像

目录 1. XKCD 2. 实战 1. XKCD xkcd是一种风格独特的漫画风格&#xff0c;以幽默、讽刺、科学和技术为主题。这种风格通常采用简单的线条和草图&#xff0c;表达出作者的思考和观点。xkcd的图像经常涉及科学、数学、计算机科学、社会和文化问题&#xff0c;以及作者个人的生…

181_带你体验 Power BI 开发者模式 pbip

181_带你体验 Power BI 开发者模式 pbip 一、背景 如果你是一个 Power BI 重度用户&#xff0c;你是不是也有如下的情况&#xff1f; 是的&#xff0c;Power BI 的版本控制全靠复制一份重命名来实现&#xff0c;而且版本之间的特点和差异时间久了就不记得了&#xff0c;还要加…