09. Nginx进阶-Rewrite

简介

什么是rewrite?

rewrite即URL重写,主要实现URL地址重写,以及重定向。
就是把插入web的请求重定向到其他URL的过程。

rewrite使用场景

  1. URL地址调整

例如用户访问wang.mingqu.com将其跳转到ming.mingqu.com。
或者当用户通过http的方式访问wang.mingqu.com时,将其跳转至https的方式访问ming.mingqu.com

  1. URL伪静态

将动态页面显示未静态页面方式的一种技术。
便于搜索引擎的录入,同时减少动态URL地址对我暴漏过多参数,提升更高的安全性。

  1. 搜索引擎SEO优化依赖于URL路径,以便于搜索引擎录入。
  2. 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

rewrite基本语法

语法格式

rewrite regex replacement [flag];
rewrite 正则表达式 替换内容 标记;

适用范围

server,针对某个网站的重定向。
location,针对某个页面的重定向。
if,或者使用if语句判断是否重定向。

表达式元字符

字符说明
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或多次
+匹配前面的字符一次或多次
?匹配前面的字符零次或一次
.匹配除"\n"之外的任何单个字符
\将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用字符
\d匹配纯数字
{n}重复n次
{n,}重复n次或更多次
[c]匹配单个字符c
[a-z]匹配a到z的小写字母的任意一个
[a-zA-Z]匹配a到z的小写字母或A到Z的大写字母的任意一个
()表达式的开始和结束位置
|或运算符

标记说明

标记说明特点
last相当于apache的[L]标记,表示完成rewrite在本条规则完成后,继续向下匹配新的location URL规则,一般或者用在server和if当中。
break本条规则匹配完成即终止,不在匹配后面的任何规则break在location下面用的多,与last类似,但是不会重新发起一次处理过程,而是直接放回处理结果
redirect返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url该标记表示当前规则匹配成功后会立即进行重定向操作
permanent返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url该标记和redirect类似,他是永久重定向

rewrite匹配优先级

  1. 先执行server标签中的rewrite指令。
  2. 再执行location标签的匹配。
  3. 最后执行location标签中的rewrite指令。

场景变量

举例:https://blog.csdn.net/weixin_40901913/article/details/135625896

  1. $host:表示匹配域名,如:blog.csdn.net。
  2. $server_port:表示匹配端口,默认http端口80,默认https端口443。
  3. $request_uri:表示匹配完整的请求URL,如:https://blog.csdn.net/weixin_40901913/article/details/135625896。
  4. $document_uri:表示匹配完整的请求路径,如:/weixin_40901913/article/details/135625896。
  5. $document_root:表示匹配真实的站点目录,如:/www/wangmingqu/html/。
  6. $request_filename:表示匹配真实站点目录下的文件,如:/www/wangmingqu/html/test.png

location基本语法

location分类

符号举例解释
=location = test {}精确匹配
location test {}一般匹配
~location ~ test {}正则匹配

location正则表达式

标记说明
~执行一个正则匹配,区分大小写
~*执行一个正则匹配,不区分大小写
!~执行一个正则匹配,区分大小写不匹配
!~*执行一个正则匹配,不区分大小写不匹配
^~普通字符匹配,使用前缀匹配,如果匹配成功,则不再匹配其他的location
=普通字符精确匹配,也就是完全匹配
@定义一个命令的location,使用在内部定向时

location优先级

  1. 首先是精确匹配。
  2. 其次是前缀匹配。
  3. 再次是按文件中顺序的正则匹配。
  4. 然后是匹配不带任何修饰的前缀匹配。
  5. 最后是通用匹配。
  6. 总结:
(1)优先级总结:(location=完整路径)>(location ^~ 路径)>(location~,~*正则顺序)>(location不分起始路径)>(location /)


(2)location匹配:
首先看优先级:精确(=)>前缀(^~)>正则(~,~*)>一般>通用(/)
优先级相同:正则看上下顺序,上面的优先,一般匹配看长度,最长匹配的优先精确,前缀,正则,一般都没有匹配到,最后再看通用匹配,一般匹配

应用

准备环境

安装Nginx

默认已安装了Nginx,此处使用yam安装(与源码安装同理)。

配置Nginx

  1. 主配置文件修改,路径:/etc/nginx/nginx.conf
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    #开启重写日志
    rewrite_log     on;

    include /etc/nginx/conf.d/*.conf;
}
  1. 子配置文件修改,路径:/etc/nginx/conf.d/wangmingqu.conf
server {
    listen 80;
    server_name wang.mingqu.com;
    charset utf8;
  
    location / {
        root /www/wangmingqu/html;
        index index.html index.htm;
    }

    location /weihu {
        root /www/wangmingqu;
        index index.html index.htm;
    }
}

资源准备

  1. 测试页面准备
mkdir -p /www/wangmingqu/{html,weihu,student/video}
echo "重写测试页面 192.168.108.129" > /www/wangmingqu/html/index.html
echo "重写测试页面 维护页面" > /www/wangmingqu/weihu/index.html
echo "访问文件路径为:/www/wangmingqu/student/video/" > /www/wangmingqu/student/video/index.html
  1. 测试页面预览

image.png
image.png

案例一

目标

基于域名的跳转。
访问域名:wang.mingqu.com/baidu时,跳转至域名:www.baidu.com。

操作

  1. 编辑Nginx配置文件
server {
    listen 80;
    server_name wang.mingqu.com;
    charset utf8;

    location / {
        root /www/wangmingqu/html;
        index index.html index.htm;
    }

    location /baidu {
        rewrite ^/baidu https://www.baidu.com;
    }
}
  1. 检查配置
nginx -t
systemctl reload nginx

验证

  1. 访问验证

image.png

  1. 日志查看
tail -300f /var/log/nginx/error.log

2024/02/01 10:53:21 [notice] 27663#27663: *84 "/baidu" matches "/baidu", client: 192.168.108.1, server: wang.mingqu.com, request: "GET /baidu HTTP/1.1", host: "wang.mingqu.com"
2024/02/01 10:53:21 [notice] 27663#27663: *84 rewritten redirect: "https://www.baidu.com", client: 192.168.108.1, server: wang.mingqu.com, request: "GET /baidu HTTP/1.1", host: "wang.mingqu.com"

案例二

目标

基于客户端IP访问跳转。
所有IP访问网站均为一个固定页面,仅客户端(192.168.108.1)可以正常访问。

操作

  1. 编辑Nginx配置文件
server {
    listen 80;
    server_name wang.mingqu.com;
    charset utf8;

    #设置一个变量,名称为rewrite_IP,变量值为true。
    set $rewrite true;

    #判断是否为合法IP
    if ($remote_addr = "192.168.108.1"){
        #如果地址不是192.168.108.1,则将rewrite_IP变量值设为false。
        set $rewrite false;
    }

    #除了合法IP,其他IP都进行重写跳转维护页面
    if ($rewrite = true){
        rewrite (.+) /weihu.html;
    }

    location = /weihu.html {
        root /www/wangmingqu/weihu/;
        index index.html index.htm;
    }

    location / {
        root /www/wangmingqu/html;
        index index.html index.htm;
    }

}
  1. 检查配置
nginx -t
systemctl reload nginx

验证

  1. 访问验证

192.168.108.1主机访问
image.png
192.168.108.130主机访问
image.png

  1. 查看日志

image.png

案例三

目标

基于旧域名跳转到新域名,后面加路径
现在访问http://www.wangmingqu.com/video,将直接跳转到http://wang.mingqu.com/student/video

操作

  1. 编辑Nginx配置文件
server {
  listen 80;
  server_name www.wangmingqu.com;
  charset utf-8;

  location /video {
    #这里的$1为位置变量,代表/video
    rewrite (.+) http://wang.mingqu.com/student/$1 permanent;
  }

  location / {
    root /www/wangmingqu/student/video;
    index index.html index.htm;
  }
}
  1. 检查配置
nginx -t
systemctl reload nginx

验证

  1. 访问验证

image.png

  1. 查看日志

image.png

案例四

目标

基于参数匹配的跳转
现在访问http://wang.mingqu.com/10010.html,跳转到http://wang.mingqu.com页面。

操作

  1. 编辑Nginx配置文件
server {
  listen 80;
  server_name wang.mingqu.com;
  charset utf-8;

  if ($request_uri ~ ^/10010.html$) {
    rewrite (.+) http://wang.mingqu.com permanent;
  }

  location / {
    root /www/wangmingqu/html;
    index index.html index.htm;
  }
}
  1. 检查配置
nginx -t
systemctl reload nginx

验证

  1. 访问验证

image.png

  1. 查看日志

image.png

案例五

目标

基于目录下所有php结尾的文件跳转
当访问http://wang.mingqu.com/data/121.php跳转到http://wang.mingqu.com。

操作

  1. 编辑Nginx配置文件
server {
  listen 80;
  server_name wang.mingqu.com;
  charset utf-8;

  location ~* /data/.*\.php$ {
    rewrite (.+) http://wang.mingqu.com permanent;
  }

  location / {
    root /www/wangmingqu/html;
    index index.html index.htm;
  }
}
  1. 检查配置
nginx -t
systemctl reload nginx

验证

  1. 访问验证

image.png

  1. 查看日志

image.png

案例六

目标

基于普通的url请求跳转
当访问http://wang.mingqu.com/data/121.html跳转到http://wang.mingqu.com

操作

  1. 编辑Nginx配置文件
server {
  listen 80;
  server_name wang.mingqu.com
  charset utf-8;

  location ~* ^/data/121.html {
    rewrite (.+) http://wang.mingqu.com permanent;
  }

  if ($request_uri ~* ^/abc/abc.html$) {
    rewrite (.+) http://wang.mingqu.com permanent;
  }

  location / {
    root /www/wangmingqu/html;
    index index.html index.htm;
  }
}
  1. 检查配置
nginx -t
systemctl reload nginx

验证

  1. 访问验证

image.png

  1. 查看日志

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机丢失msvcp140_1.dll怎样修复,分享五种有效的解决方法

当计算机系统中msvcp140_1.dll文件发生丢失时,可能会引发一系列运行问题,具体表现形式多种多样。首先,由于msvcp140_1.dll是Microsoft Visual C Redistributable Package的重要组成部分,它的缺失将直接影响到依赖这一库的各类应用…

VLAN虚拟局域网络

VLAN的概念和配置: http://t.csdnimg.cn/g39F7http://t.csdnimg.cn/g39F7 VLAN中常见的接口类型 http://t.csdnimg.cn/mhahzhttp://t.csdnimg.cn/mhahz 实验:

KCMY1VUG12T8更大容量、更快企业级SSD NVMe PCIe

近年来,随着SSD固态硬盘技术的不断成熟和价格的进一步下降,SSD逐渐普及到市场。越来越多的企业、个人开始采用SSD,用户体验得到了显著提升。 最近感觉无论国内国外的客户需求均发生一些变化,具体主要体现在3个方面。 1、容量持续…

总结:直径测量的发展历程!在线测径仪已成主要方式!

测量在生活、生产和科学探究中扮演着至关重要的角色。从古至今,人们对测量的探索从未停止。而外径作为一种基础的几何尺寸,其测量也经过了多代发展,直到至今被广泛应用到工业生产中的在线测径仪。本文就来介绍一下外径测量的发展历程&#xf…

如何用Elementor创建WordPress会员网站

在下面的文章中,我们将向您展示如何使用Elementor和MemberPress在WordPress中轻松构建会员网站。这篇文章将涵盖WordPress会员网站设置过程、会员资格和受保护内容创建、重要页面和登录表单设计、电子邮件通知管理、报告等。 目录 什么是WordPress会员网站&#x…

5G智能制造热力工厂数字孪生可视化平台,推进热力行业数字化转型

5G智能制造热力工厂数字孪生可视化平台,推进热力行业数字化转型。在当今这个信息化、数字化的时代,热力生产行业也迎来了转型的关键时刻。为了提升生产效率、降低成本、提高产品质量,越来越多的热力生产企业开始探索数字化转型之路。而5G智能…

短视频账号矩阵系统开发3年----技术环境外部的动荡

前言: 目前市面上开发短视频账号矩阵系统的源头公司已经不多了吧,或者说都已经被市场被官方平台的政策影响的不做了吧,做了3年多的矩阵系统开发到现在真的是心里没有安全感吧,抖音的代发布接口,21年大封一次&#xff…

机械五要素手持气象站的应用

TH-SQ5在数字化和智能化的时代背景下,气象监测技术正日益成为众多行业不可或缺的利器。其中,机械五要素手持气象站以其便携性、实时性和多功能性受到了广泛关注。下面讲解一下手持气象站是什么以及应用: 一、机械五要素手持气象站概述 机械五…

Unity2023.1.19_ECS_DOTS

Unity2023.1.19_ECS_DOTS 盲学-盲目的学习: 懒着自己整理就看看别人整理的吧,整合一下逻辑通了不少: DOTS/data oriented technology stack-面向数据的技术栈 ECS/Entities-Component-System Unity-Entities包 Entities提供ECS架构面向数…

指针篇章-(2)

学习流程图 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————…

Domain Adaptation Vs. Prompt-Tuning:能否用域自适应解决大模型提示学习问题?

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 作者简介 李江梦,中国科学院软件研究所天基综合信息系统全国重点实验室助理研究员 论文简介 今天介绍的是被机器学习领域顶级学术会议ICLR 2024接收的论文:BayesPrompt: Prompting Large…

微信公众号里的视频怎么提取出来,30秒轻松下载视频方法!

在微信公众号中,我们常常能发现许多精彩纷呈的视频内容,这些视频或许让我们受益匪浅,或许让我们捧腹大笑。然而,微信平台并没有提供直接的下载功能,这让许多用户感到困扰。 别担心,今天我们就来揭秘如何将…

低密度奇偶校验码LDPC(九)——QC-LDPC译码器FPGA全并行设计

往期博文 低密度奇偶校验码LDPC(一)——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC(二)——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC(三)——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

flink重温笔记(十):Flink 高级 API 开发——flink 四大基石之 State(涉及Checkpoint)

Flink学习笔记 前言:今天是学习 flink 的第 10 天啦!学习了 flink 四大基石之 State (状态),主要是解决大数据领域增量计算的效果,能够保存已经计算过的结果数据状态!重点学习了 state 的类型划…

IISExpress 跨域cookie的奇怪问题

测试环境 WIN10,IIS 10,IISExpress 10,Chrome 120,Microsoft Edge 114 网站A 端口7001 只有1个Default.aspx,无前端代码。逻辑很简单,SetCookie用来把客户端传过来的值写入到cookie中,GetCoo…

RK DVP NVP6158配置 学习

NVP6158简介 NVP6158C是一款4通道通用RX,提供高质量图像的芯片。它接受来自摄像机和其他视频信号的独立4通道通用输入来源。它将4通道通用1M至8M 7.5P视频格式数字化并解码为代表8位ITU-R BT.656/1120 4:2:2格式的数字分量视频,并将单独的BT.601格式与27…

基于ERNIR3.0文本分类的开发实践

参考: https://zhuanlan.zhihu.com/p/574666812?utm_id0 遇到的问题:如下 采用paddleNLP下文本分类实例进行分类训练后发现 生成的模型分类不准。打算自己开发脚本进行分类计算再进行服务化部署。

指针数组的理解

指针数组的概念:即用于存放指针变量的数组 代码如下:使用指针数组来模拟二维数组 int main() {//创建三个整型数组int arr1[] { 1,2,3,4,5 };int arr2[] { 2,3,4,5,6 };int arr3[] { 3,4,5,6,7 };int* p_arr[3] { arr1,arr2,arr3 };for (int i 0;…

WiFi|硬体:茶凳浅谈-高通802.11be WLAN AP Chipsets 参考设计与boardData之间的映射

前言: WiFi|硬体:茶凳浅谈-高通Wi-Fi 7立项前的选型 博文中提到一些选型的组合,比如: 主芯片的搭配IPQ9554 QCN9274 (2x2 2.4G, 2x2 5G) QCN9272 (2x2 6G) 主芯片的搭配IPQ9574 QCN9274 (2x2 2.4G, 2x2 5GL) QCN9274 (2x2 5GH, 2x2 6G) 红色标示出差异的部分…

电脑硬件变化报警|2024完整珍藏版

公司中常常会有一种泄密事情发生,是这样的: 使用移动硬盘、外部硬盘驱动器或其他外部存储设备,将文件复制到这些设备上,然后将设备连接到另一台电脑,即可将文件拷贝出去。 还有人这样说:“我人都在面前了…