Nginx中rewrite的用法详解

Nginx 的 location 匹配 与 rewrite 重写跳转 目录前言一、Nginx中的 正则表达式二、location 匹配2.1 location常用的匹配规则2.2 location 优先级2.3 location 示例说明2.4 必选规则三、rewrite 转发3.1 Rewrite 介绍3.2 Rewrite 实现3.3 rewrite 执行顺序3.4 rewrite 语法格式3.5 flag 标记说明3.6 rewrite 示例3.6.1 基于域名的跳转3.6.2 基于客户端 IP 访问跳转 前言 一、Nginx中的 正则表达式 ^ :匹配输入字符串的起 阅读详情

一、rewrite简介

1.1 rewrite跳转场景

  • 1、URL看起来更规范、合理
  • 2、企业会将动态URL地址伪装成静态地址提供服务
  • 3、网址换新域名后,让旧的访问跳转到新的域名上
  • 4、服务端某些业务调整

1.2 rewrite跳转实现过程

在这里插入图片描述

1.3 rewrite实际场景

  • 1.3.1 Nginx跳转需求的实现方式
    使用rewrite进行匹配跳转
    使用if匹配全局变量后跳转
    使用location匹配再跳转
  • 1.3.2 rewrite放在server{},if{},location{}段中
    location只对域名后边的除去传递参数外的字符串起作用
  • 1.3.3 对域名或参数字符串
    使用if全局变量匹配
    使用proxy_pass反向代理

1.4 nginx正则表达式

常用的正则表达式元字符

^:匹配输入字符串的起始位置
$:匹配输入字符串的结束位置
*****:匹配前面的字符零次或多次
+:匹配前面的字符一次或多次
?:匹配前面的字符零次或一次
.:匹配除\n之外的任何单个字符 使用[.\n]可以匹配包括\n在内的任意字符
****:转义符
\d:匹配纯数字
{n}:重复n次
{n,}:重复n次或更多次
[c]:匹配单个字符c
[a-z]:匹配a-z小写字母的任意一个
[a-zA-Z]:匹配a-z小写字母或A-Z大写字母的任意一个

二、rewrite命令

2.1 rewrite 命令语法

rewrite  <正则表达式>  <跳转后的内容>  [rewrite支持的flag标记]

2.2 flag标记说明

在这里插入图片描述

2.3 last与break比较

1)last:url重写后,马上发起一个新请求。再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏不变。
2)break:url重写后,直接使用当前资源,不再使用location余下的语句,完成本次请求,地址栏不变。
总结:last和break在重定向后,地址栏都不会发生变化,这是它们的相同点,不同点在于last会写在server和if中,break是写在location中,last不会终止重写后的url匹配,break会终止重写后的url匹配。

三、location

3.1 location优先级

1、相同类型的表达式,字符串长的会优先匹配
2、按优先级排列(把最先执行的写在配置文件的最上面)
= 类型
^~ 类型表达式
正则表达式(和*)类型
常规字符串匹配类型,按前缀匹配
通用匹配(/),如果没有其它匹配,任何请求都会匹配到

3.2 rewrite与location比较

  • 1、相同点
    都能实现跳转
  • 2、不同点
    rewrite是在同一域名内更改获取资源的路径
    location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器
  • 3、rewrite会写在location里,执行顺序
    执行server块里面的rewrite指令
    执行location匹配
    执行选定的location中的rewrite指令
  • 4、location优先级示例
location = / {	###精确匹配 /,主机名后面不能带任何字符串
    [configuraion A ]	
}

location / {	###所有的地址都以/开头,这条规则将匹配到所有请求,但正则和最长字符串会优先匹配
    [configuraion B ]
}

location /documents/ {		###匹配任何以/documents/开头的地址,当后面的正则表达式没有匹配到时,才起作用
    [configuraion C ]
}

location ~ /documents/abc {		###匹配任何以/documents/abc开头的地址,当后面的正则表达式没有匹配到时,才会起作用
    [configuraion D ]
}

location ^~ /images/ {	###以/images/开头的地址,匹配符合后,停止往下匹配
    [configuraion E ]
}

location ~*\.(gif|jpg|gpeg)$ {	###匹配所有以 gif, jpg或jpeg结尾的请求, Images/下的图片会被 [configuration E]处理,因为^~的优先级更高
    [configuraion F ]
}

location /images/abc {	###最长字符匹配到 /images/abc,优先级最低
    [configuraion G ]
}

location ~ /images/abc {	###以/ Images/abc开头的,优先级次之
    [configuraion H ]
}

location /images/abc/1.html {	###如果和正则 ~ images/abc/1.htm相比,正则优先级更高
    [configuraion I ]
}

3.3 location常用优先级规则

1、匹配某个具体文件

(location = 完整路径)>(location ^~ 完整路径)>(location ~* 完整路径)=(location ~ 完整路径)>(location 目录)>(location /)

2、用目录做匹配访问整个文件

(location = 目录)>(location ^~ 目录)>(location ~* 目录)=(location ~ 目录)>(localtion 目录)>(location /)

四、实用案例

环境准备:需安装nginx服务

4.1 基于域名的跳转

现在公司旧域名www.old.com有业务需求有变更,需要使用新域名www.new.com代替。
要求:
旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变

修改配置文件

[root@client1 ~]# ln -s /usr/local/nginx/conf/nginx.conf /etc/nginx.conf
[root@client1 ~]# vi /etc/nginx.conf
......
    server {
        listen       80;
        server_name  www.old.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            if ($host = 'www.old.com')  #rewrite的配置
               {
         rewrite ^/(.*)$ http://www.new.com/$1 permanent;    #将旧域名重写为新域名
               }
        }
......
#重启服务,可能需要重启电脑
systemctl restart nginx

添加映射

vi /etc/hosts
192.168.235.10 www.old.com www.new.com

验证,访问www.old.com,域名会自动跳转成新域名
在这里插入图片描述

4.2 基于客户端ip访问跳转

要求:
公司内部可以用来访问服务器的地址为192.168.35.10,其他客户端访问时跳转到error网页提示网页在维护,不可用
修改配置文件

[root@client1 ~]# vi /etc/nginx.conf 
    #gzip  on;   
    server {
        listen       80;
        server_name  www.aa.com;  #设置域名
        
        set $rewrite true;
            if ($remote_addr = "192.168.235.10"){   #仅本服务器访问时可访问正常页面
                 set $rewrite false;
            }
            
            if ($rewrite = true){   #其余客户机访问时,跳转到error网页
                 rewrite (.+) /error.html;
            }
            
            location = /error.html {
            root /usr/local/nginx/html;  #error网页目录
            }
            
            location / {
            root   html;
            index  index.html index.htm;
            ......

重启服务并关闭防火墙

systemctl restart nginx
systemctl stop firewalld
setenforce 0

添加映射

vi /etc/hosts
192.168.235.10 www.aa.com

其他客户机打开显示维护
在这里插入图片描述

4.3 基于新旧域名跳转并加目录

将域名http://old.aa.com下面的发帖都跳转到http://www.bb.com/bbs,且域名跳转后保持参数不变

修改配置文件

[root@client1 ~]# vi /etc/nginx.conf 
    server {
        listen       80;
        server_name  old.aa.com;    
        #charset koi8-r;    
        #access_log  logs/host.access.log  main;
                  
        location  /post {    #访问post路径下的网页,会跳转到,www.bb.com/bbs,下对应的网页
             rewrite (.+) http://www.bb.com/bbs$1 permanent;
        }
  
        location / {
            root   html;
            index  index.html index.htm;
            .....   
#重启服务
systemctl restart nginx

创建bbs目录

[root@client1 ~]# cd /usr/local/nginx/html/
[root@client1 html]# mkdir -p bbs/post
[root@client1 html]# cd bbs/post/
[root@client1 post]# vi index.html
welcom new web

添加IP与主机的映射,用哪个主机访问,就要在哪个主机上添加映射

[root@client1 post]# vi /etc/hosts
192.168.235.10 old.aa.com www.bb.com

测试。访问old.aa.com/post/index.html,,会跳转成如下页面
在这里插入图片描述

4.4 基于参数匹配的跳转

访问http://www.bb.com/100-(100|200)-任意数字.html
跳转到http://wwwbb.com页面。
修改配置文件

[root@client1 post]# vi /etc/nginx.conf 

    server {
        listen       80;
        server_name  www.bb.com;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #如果访问的域名跟上100-100-数字或100-200-数字.html的形式结尾,则跳转
        if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
            rewrite (.*) http://www.bb.com permanent;
        }

        location / {
            root   /usr/local/nginx/html;
            index  index.html index.htm;
......
#重启服务
systemctl restart nginx

测试,访问www.bb.com/100-200-13.html,或www.bb.com/100-100-99.html
在这里插入图片描述

4.5 基于目录下所有PHP文件的跳转

访问http://wwwbb.com/upload/test.php跳转到首页
修改配置文件

[root@client1 post]# vi /etc/nginx.conf
 server {
        listen       80;
        server_name  www.bb.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~* /upload/.*\.php$ {   #访问upload/目录下所有的PHP结尾的网页时跳转,不区分大小写
            rewrite (.+) http://www.bb.com permanent;
        }
        location  / {
            root   html;
            index  index.html index.htm;
        }
        ......
#重启服务
systemctl restart nginx

在这里插入图片描述

4.6 基于最普通url请求的跳转

访问一个具体的页面跳转到首页,如浏览器访问http://www.bbcom/test/test.html跳转到首页。
修改配置文件

[root@client1 post]# vi /etc/nginx.conf
 server {
        listen       80;
        server_name  www.bb.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~* ^/test/test.html {
          rewrite (.+) http://www.bb.com permanent;
        }
        location  / {
            root   html;
            index  index.html index.htm;
        }
        ......
#重启服务
systemctl restart nginx

在这里插入图片描述

Nginx 之Rewrite 使用详解 Nginx 的rewrite模块是处理 HTTP 请求过程中的一个重要功能,它允许基于 Perl 兼容正则表达式(PCRE)对用户请求的 URI 进行重写,并返回 30x 重定向跳转或按条件执行相关配置。这个模块提供了灵活的 URL 重写和重定向功能,可以用于实现友好 URL、301/302 重定向、条件重写等。 阅读详情

相关推荐

Nginx—Rewrite

匹配输入字符串的起始位置匹配输入字符串的结束位置匹配前面的字符零次或多次匹配前面的字符一次或多次匹配前面的字符零次或一次匹配除 之外的任何单个字符转义字符,使后面的字符被视为普通字符或特殊字符d匹配数字(相当于[0-9]{n}匹配前面的字符恰好 n 次{n,}匹配前面的字符至少 n 次{n,m}匹配前面的字符至少 n 次,至多 m 次[]定义字符集,匹配括号内的任意单个字符[c]匹配单个字符 c[a-z]匹配小写字母中的任意一个匹配所有大小写字母或数字()

m0_74823524的博客 905

nginx之rewrite用法

rewrite用法 【语法】 rewrite regex replacement [flag]; flag=【break|last|redirect|permant】 regex: 是正则表达式; replacement:是替换值,是新值; flag: 处理标志,可以省略。 rewrite配置文件 server { listen 80; server_name rewrite.smallboy.com; location /a.html { root html; } #访问

weixin_38753143的博客 1358

nginx rewrite功能使用

nginx rewrite功能使用

congge 1万+

nginx rewrite(重定向)

Rewrite及URL重写,主要是实现地址重写,以及重定向,就是把输入Web的请求重定向到其他URL的过程location 用于匹配 用户访问请求的URL ,来使用哪一个目录中的网页资源,rewrite ....... permanent 修改url 后再次请求访问rewrite /weihu.html 按照修改域名后的 url 直接跳转到对应的 locationrewrite 如果对全URL 重写,则重写部分就以http:// 开头,后面跟上重写后的URL。

TTSuzuka的博客 1万+

详解nginx中location、rewrite用法总结

主要介绍了详解nginx中location、rewrite用法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Nginx rewrite跳转应用场景详解

主要介绍了Nginx rewrite跳转应用场景详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Nginx-rewrite模块详解

nginx一些场景,我们需要使用rewrite模块。例如域名改了,为了利用网站seo进行伪静态处理。通过判断来实现一些逻辑处理等。这里我们介绍下ngx_http_rewrite_module模块rewrite模块在nginxHTTP处理阶段中出现了两次,需要注意先后顺序,rewrite模块的使用场景还是比较丰富的,我们会陆续补充。

cuiwin的专栏 2138

从MATLAB代码入手:手把手教你复现OTFS调制解调核心模块(附完整函数解析)

本文详细解析了OTFS调制解调技术在MATLAB中的实现方法,包括核心模块如ISFFT变换、海森堡变换及MP检测算法的代码实现。通过完整的函数解析和性能验证框架,帮助通信工程师快速掌握这一前沿技术,提升在高速移动场景下的通信系统设计能力。

weixin_42568801的博客 318

Nginx——Rewrite用法详解

目录 1、Rewrite的定义 2、应用场景 3、Rewirte的语法 4、正则表达式 5、示例 1、Rewrite的定义 rewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。 rewrite只能放在 server { }, location { }, if { }中,并且只能对域名后边的除去传递的参数外的字...

方才coding 1万+

【软考高项】五十一、常见必会的几种进度网络图(单代号、双代号、七格图、横道图)

软考高项计算题进度网络图画图介绍

有莘不破的博客 3万+

波束形成算法:LCMV实现(MATLAB)

阵列信号处理,波束成形,

weixin_43601588的博客 1万+

nginx配置rewrite的用法详解

文章目录rewrite中if的用法rewrite中break和last的用法1.break和last在location{}外部时 rewrite中if的用法 格式:if (条件判断) { 具体的rewrite规则 } if条件判断语句由Nginx内置变量、逻辑判断符号和目标字符串三部分组成。 其中,内置变量是Nginx固定的非自定义的变量,如,$request_method, $request_u...

FUYY'S BLOG 4990

基于Simulink的光伏-储能-柴油机混合微网仿真

摘要:本文基于Simulink平台构建光伏-储能-柴油机混合微网仿真模型,实现可再生能源与备用电源的协同控制。通过光伏优先、储能调节、柴油机兜底的规则控制策略,在24小时仿真中验证了系统在晴天、阴天和夜间三种典型工况下的运行性能。模型采用PVArray模块模拟光伏发电,Simscape电气库构建储能系统,自定义MATLAB函数实现柴油机启停逻辑和能量管理。仿真结果显示系统功率平衡误差<5%,储能SOC维持在20%-80%,柴油机日均运行时间<4小时,满足设计指标。文章详细说明了建模步骤、参数设置

xiaoheshang_123的博客 68

Nginx Rewrite详解

一、Rewrite基本介绍 1.1 什么是Rewrite Rewrite主要实现url地址重写, 以及url地址跳转。就是将用户请求web服务器的URL地址重新修改为其他URL地址的过程。 比如说京东,google、亚马逊都在使用 域名 重写后域名 www.z.cn www.amazon.cn www.g.cn www.google.cn www.360buy.com www.jd.com 58.com bj.58.com 1.2 Rewrite应用场景 地址跳转,用户访问

人丑就要多读书的博客 6549

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

1071

【DL经典回顾】距离度量大汇总(7-余弦距离(Cosine Distance))

余弦距离(Cosine Distance)衡量的是两个向量在方向上的差异性,而不是在大小上的差异。

悦学共鸣,温柔以待,汇聚光芒,共同成长 2576

Nginx Rewrite

Nginx Rewrite前言一、nginx rewrite概述(1)(2)跳转场景(3)跳转实现(4)rewrite实际场景①nginx跳转需要的实现方式②rewrite放在server{}, if{},location{}段中③对域名或参数字符串二、常见的Nginx正则表达式(1)常见的正则表达式的元字符(2)正则表达的优势③Nginx使用正则的作用三、rewrite(1)rewrite语法(2)rewrite执行顺序四、location分类和优先级(1)location匹配规则格式(2)locatio

qq1356059950的博客 2万+

抓包网络调试工具 reqable抓包教程

如果CA根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入CA根证书安装界面,详细步骤请阅读。在API调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用Reqable获取流量,通俗地讲就是抓包。我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。首先,需要启用Reqable的调试功能,点击最右上角的。打开浏览器,输入地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2552

Nginx rewrite 详解

Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容,重定向到replacement,结尾是flag标记。 基本语法: rewrite <regex> <replacement> [flag]; 关键字 正则 替代

qq_34285557的博客 2184

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

nginx中location、rewrite用法总结

一、location用法总结 location可以把不同方式的请求,定位到不同的处理方式上. location的用法 location ~* /js/.*/\.js 以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。 以 ^~ 开头,表示uri以某个常规字符串开头,不是正则匹配 以 ~ 开头,表示区分大小写的正则匹配; 以 ~* 开头,表示不区分大小写的正则匹配 以 / ...

Yplayer001的博客 961

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Tomcat的简介及安装部署详细过程
下一篇: Mysql基础
糖果剑客
博客等级 码龄6年 97粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值