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

手把手教你用ObjectCRX进行Caxa二次开发:从零开始的环境搭建教程

本文是一份面向零基础初学者的Caxa二次开发实战指南,重点讲解如何使用ObjectCRX框架从零开始搭建开发环境。内容涵盖Visual Studio 2015版本锁定、ObjectCRX向导集成、项目创建、典型错误解决,并最终实现一个可在Caxa中运行的HelloWorld程序,帮助开发者快速入门并避开常见陷阱。

w3x4y的博客 509

Nginx——Rewrite用法详解

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

方才coding 1万+

Windows下CMake编译VTK

选择项目INSTALL,生成该项目,得到vtk在Debug模式下的lib和dll文件,在文件夹中可看见,已得到debug模式下lib库与dll库。,把Value值设置为最后在vtk_sln中生成include、dll、lib的位置。在上面点击Configure后,红色区域没有了。选择自己vs编译平台的版本信息,我这边已经设置好了没有这个设置了,借用参考博客的图片。设置完后,点击左下角"Configure",然后等待Configure。,把搜索结果的Value勾选上。在search中搜索。

weixin_74239923的博客 841

保姆级教程:在Ubuntu 22.04上用Conda搞定nuPlan数据集环境(Python 3.9 + PyTorch)

本文提供了一份详细的Ubuntu 22.04环境下使用Conda配置nuPlan自动驾驶数据集的保姆级教程,涵盖Python 3.9安装、Conda环境管理、PyTorch配置及数据集可视化验证等关键步骤,帮助开发者高效搭建开发环境。

weixin_29061997的博客 254

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

【MATLAB】绘制泽尼克多项式

上次只给了公式没有给代码,很多小伙伴表示不是很认可。今天直接把代码发上来了。

HPC_ZY 5575

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

Qualcomm AI Engine Direct SDK(QNN)的使用介绍

Qualcomm AI Engine Direct SDK,高通新的AI模型推理框架,又名QNN,为AI开发提供统一API的底层框架。通过这个SDK,可以在高通的 CPU/GPU和HTP上对AI模型进行性能加速。2.Qualcomm AI Engine Direct SDK的公开英文文档。1.Qualcomm AI Engine Direct SDK的下载和安装。

u013250861的博客 6971

uniapp - 解决 uni.chooseImage 在苹果 IOS 真机上点击没反应的问题,苹果手机点击 uni.chooseImage方法不生效,也不报任何错误(解决苹果ios系统点击无效问题)

uniapp小程序h5网页苹果ios系统点击uni.chooseImage不执行点击无效,uniapp使用uni.chooseImage方法点击没反应怎么办,uniappuni.chooseImage在ios苹果手机运行点击不触发,uniappuni.chooseImage苹果ios系统点击无效,uniapp项目ios端云打包之后uni.chooseImage不生效了,uniapp打包之后uni.chooseImage()无法打开相机,uniapp苹果手机无法打开相机和相册,uniapp网页h5微信支

🏆 前端领域优质创作者 1万+

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万+

Mac版 Android Studio自带模拟器无法联网解决方案

前言 作为一枚安卓开发者,免不了使用模拟器来开发调试(毕竟它比手机方便太多)。但是因为适配需要,我们会更多的使用真机开发调试,那么当模拟器遇到这样那样的问题,我们往往会无从下手,其中最烦的就是网络问题。 我最近图方便,又重新用起了模拟器,但是发现联网失败,用模拟器内置的浏览器也打不开网页,于是百度上一通找,毫无效果,各种说用cmd命令行设置模拟器dns的都没用,显示没有什么dns文件啥的,后来...

陈万洲的专栏 1万+

Nginx rewrite 详解

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

qq_34285557的博客 2184

【R-terra包|第一节】- 栅格相关性、散点图 、波段的计算与异常值处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 —```mermaid flowchat st=>start: 开始 e=>end: 结束 op=>operation: 我的操作 cond=>condition: 确认? st->op->cond cond(yes)->e cond(no)->op 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能.

地理空间科学的博客 5614

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

nginx中location、rewrite用法总结

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

Yplayer001的博客 961

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值