Nginx跳转模块之rewrite

一.location与rewrite模块的区别

rewrite:对访问的域名或者域名内的URL路径地址重写
location:对访问的路径做访问控制或者代理转发

二.rewrite模块基本内容

1.功能

通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配,rewrite主要是针对用户请求的URL或者是URI做具体处理

2.跳转场景

Rewrite 跳转场景主要包括以下几种

(1)可以调整用户浏览的 URL,看起来更规范,合乎开发及产品人员的需求
(2)为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态 URL 地址伪装成静态地址提供服务
(3)网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的 360buy.com会跳转到 jd.com
(4)根据特殊变量、目录、客户端的信息进行 URL 调整等。

3.跳转实现

(1)Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
(2)跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
(3)从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
(4)重写模块 set 指令:创建新的变量并设其值

4.执行顺序

首先  执行 server 块里面的 rewrite 指令。
其次  执行 location 匹配。
最后  执行选定的 location 中的 rewrite 指令

5.格式

rewrite <regex> <replacement> [flag];
regex :表示正则匹配规则。
replacement :表示跳转后的内容。
flag :表示 rewrite 支持的 flag 标记。

flag标记说明

(1)last :本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中。
(2)break :本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中。
(3)redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
(4)permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

三.rewrite实验

1.基于域名跳转

现在公司旧域名www.6.com有业务需求变更,需要使用新域名www.9.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。
(1)修改主配置文件
vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.6.com;										#域名修改	charset utf-8;access_log  /var/log/nginx/www.6.com-access.log;		        #日志修改location / {													#添加域名重定向if ($host = 'www.6.com'){									#$host为rewrite全局变量,代表请求主机头字段或主机名rewrite ^/(.*)$ http://www.9.com/$1 permanent;		#$1为正则匹配的内容,即域名后边的字符串}root   html;index  index.html index.htm;}
}

(2)创建所需目录与文件
#创建日志文件夹,检查语法
mkdir -p /var/log/nginx
nginx -t#创建网页test目录与文件1.html
mkdir -p /usr/local/nginx/html/test
vim /usr/local/nginx/html/test/1.html
------------------------------------------
<h1 font color=red>
Here is the content of test
<img src="1.jpg"/>
</h1
-------------------------------------------#上传1.jpg图片文件
cd /usr/local/nginx/html/test
rz -E

(3)添加域名与IP地址映射关系
#添加映射关系
echo "192.168.227.100 www.6.com www.9.com" >> /etc/hosts#重启服务
systemctl restart nginx					

(4)网页验证
#打开浏览器输入
www.6.com/test/1.html会发现重定向到www.9.com/test/1.html

2.基于客户端IP访问跳转

公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.227.100访问正常。
(1)修改主配置文件
vim /usr/local/nginx/conf/nginx.conf
--------------------------------------------------------------
server {listen       80;server_name  www.6.com;												#域名修改	charset utf-8;access_log  /var/log/nginx/www.kgc.com-access.log;				#日志修改#设置是否合法的IP标记set $rewrite true;							#设置变量$rewrite,变量值为boole值true#判断是否为合法IPif ($remote_addr = "192.168.227.100"){		#当客户端IP为192.168.80.200时,将变量值设为false,不进行重写set $rewrite false;}#除了合法IP,其它都是非法IP,进行重写跳转维护页面if ($rewrite = true){						#当变量值为true时,进行重写rewrite (.+) /weihu.html;				#重写在访问IP后边插入/weihu.html,例如192.168.80.11/weihu.html}location = /weihu.html {root /var/www/html;						#网页返回/var/www/html/weihu.html的内容}location / {root   html;index  index.html index.htm;}
}

(2)设置维护界面并重启服务
mkdir -p /var/www/html/
vim /var/www/html/weihu.html
-----------------------------------
<h1>
Sorry!
We are busy now!
See you tomorrow!
</h1>
-----------------------------------systemctl restart nginx

(3)网页验证
#本机网页浏览器输入
www.6.com
访问应正常#在其他设备浏览器访问测试首先修改映射文件
echo "192.168.277.100 www.6.com" >>/etc/hosts#浏览器测试
www.6.com

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot3+Vue3 基础知识(持续更新中~)

bean 把方法的返回结果注入到ioc中 1: 2: 3: 组合注解封装 实战篇&#xff1a; 解析token&#xff1a; 统一携带token&#xff1a; 驼峰命名与下划线命名转换&#xff1a;

WebAPI [Swagger] 发布ISS不能生成xml文件问题记录

因为Swagger文件的注释是读取项目xml的。 除了Debug要输出xml&#xff0c;正式发布release时也要输出xml

【LeetCode刷题笔记】242.有效的字母异位词

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

Windows 远程控制 Mac 电脑怎么操作

要从 Windows 远程控制 Mac 电脑&#xff0c;您可以使用内置 macOS 功能或第三方软件解决方案。以下是一些方法&#xff1a; 一、使用内置 macOS 功能&#xff08;屏幕共享&#xff09; 1、在 macOS 上启用屏幕共享 转至系统偏好设置 > 共享&#xff1b;选中“屏幕共享”…

【MySQL】多表操作、事务、索引

MySQL MYSQL 多表设计 一对多插入测试数据外键约束(物理外键)使用逻辑外键 MYSQL 多表设计 一对一表结构 MYSQL 多表设计 多对多 MYSQL 多表设计 一对多 建表语句 员工表 CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,username VARCHAR(20) N…

LabVIEW储氢材料循环寿命测试系统

LabVIEW储氢材料循环寿命测试系统 随着氢能技术的发展&#xff0c;固态储氢技术因其高密度和安全性成为研究热点。储氢材料的循环寿命是衡量其工程应用的关键。然而&#xff0c;传统的循环寿命测试设备存在成本高、测试效率低、数据处理复杂等问题。设计了一种基于LabVIEW软件…

[已解决]npm淘宝镜像最新官方指引(2023.08.31)

最新的配置淘宝镜像的淘宝官方提供的方法 npm config set registry https://registry.npmmirror.com原来的 registry.npm.taobao.org 已替换为 registry.npmmirror.com &#xff0c;当点击 registry.npm.taobao.org 会默认跳转到 registry.npmmirror.com 如果你想将npm的下载…

【Unity】提示No valid Unity Editor liscense found.Please active your liscense.

有两个软件&#xff0c;如果只有一个&#xff0c;点黑的不会有效果、、、、&#xff08;楼主是这个原因&#xff0c;可以对号入座一下&#xff09; 简而言之&#xff0c;就是去下载Unity Hub&#xff0c;再里面激活管理通行证 问题情境&#xff1a; 点击unity出现以下弹窗&a…

uniapp 使用 z-paging组件

使用 z-paging 导入插件 获取插件进行导入 自定义上拉加载样式和下拉加载样式 页面结构 例子 搭建页面 <template><view class"content"><z-paging ref"paging" v-model"dataList" query"queryList"><templ…

java基础-正则表达式+文件操作+内置包装类

目录 正则表达式去除字符串前后空格&#xff1a;去除每一行中首尾的空格去除开头的 数字_ 文件操作打印当前项目路径获取文件的上级目录/和\读取文件 内置包装类System类常用方法 Number类Integer类常用方法Float和Double 正则表达式 去除字符串前后空格&#xff1a; str.tri…

【mysql】时间戳与date互转

查看当前时区 show variables like %time_zone%;时间戳与date互转的注意事项 UNIX_TIMESTAMP() 与 FROM_UNIXTIME() 是一对儿时区要相同不指定时区时&#xff0c;使用mysql配置的默认时区。参考“查看当前时区”。 date转时间戳 时间戳转date 参考 https://dev.mysql.com/d…

go使用trpc案例

1.go下载trpc go install trpc.group/trpc-go/trpc-cmdline/trpclatest 有报错的话尝试配置一些代理&#xff08;选一个&#xff09; go env -w GOPROXYhttps://goproxy.cn,direct go env -w GOPROXYhttps://goproxy.io,direct go env -w GOPROXYhttps://goproxy.baidu.com/…