Nginx中rewrite(地址重定向)的深入剖析

Nginx中rewrite(地址重定向)的深入剖析

什么是rewrite

rewrite,翻译成中文即为“地址重定向”,是 Nginx 的一个非常重要的模块。该模块可以根据规则匹配 URL,并将 URL 重定向到指定的地址。

rewrite规则语法

rewrite regex replacement [flag];

其中:

  • regex:正则表达式,用于匹配需要重定向的 URL。
  • replacement:重定向后的地址。
  • flag:标记,可选参数。

rewrite规则示例1

假设有这样一个 URL:

http://example.com/foo/bar

我们希望将其重定向到:

http://example.com/bar/foo

那么,在 Nginx 的配置文件中,我们可以这样编写 rewrite 规则:

location /foo {
    rewrite ^/foo/(.*)$ /bar/$1/foo last;
}

这个 rewrite 规则中,我们使用了正则表达式 ^/foo/(.*)$,将 URL /foo/bar 中的 bar 匹配出来,并在 replacement 中使用 $1 将其插入到新 URL /bar/$1/foo 中。

其中 last 标记表示将重定向结果作为新的 URL 并继续执行 Nginx 的其他模块。

rewrite规则示例2

再考虑一个场景,有一个网站,其中包含很多二级域名,比如:

http://abc.example.com
http://def.example.com

现在我们希望将这些域名都重定向到:

http://example.com

那么,我们可以这样编写 rewrite 规则:

server {
    listen       80;    
    server_name  ~^(?<subdomain>.+)\.example\.com$;
    rewrite ^ http://example.com permanent;
}

在这个示例中,我们使用了正则表达式 ~^(?<subdomain>.+)\.example\.com$,捕获了域名中的二级子域名,即 abcdef

然后,在 replacement 中只指定了 http://example.com,代表将所有匹配到的 URL 都重定向到 http://example.com

最后,我们使用了 permanent 标记,表示这个重定向是永久性的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nginx中rewrite(地址重定向)的深入剖析 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Windows下nginx+fastcgi+php的并发阻塞问题

    首先在nginx.conf中进行如下配置: worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 60; u…

    Nginx 2023年4月10日
    00
  • 利用Nginx实现反向代理Node.js的方法详解

    我会给你提供“利用Nginx实现反向代理Node.js的方法详解”的完整攻略,包括两条示例说明。 什么是反向代理 反向代理是一种代理模式,表示代理的对象是服务端。通常用于实现负载均衡、缓存加速以及安全性方面的需求等。 为什么需要反向代理 在实际的应用场景中,我们可能需要同时运行多个相同的服务器来处理用户的请求,以实现负载均衡。另外,反向代理对象通常是暴露在公…

    Nginx 2023年5月16日
    00
  • [日常] 前端资源测试机上忽略版本号的的nginx配置

    利用nginx的rewrite的指令,可以实现url的重新跳转,rewrtie有四种不同的flag,分别是redirect(临时重定向)、permanent(永久重定向)、break和last。其中前两种是跳转型的flag,后两种是代理型,跳转型是指有客户端浏览器重新对新地址进行请求,代理型是在WEB服务器内部实现跳转的 redirect #临时重定向,重写…

    Nginx 2023年4月9日
    00
  • [Centos7]无法访问配置好的nginx

    Centos7无法访问配置好的nginx 临时生效   # 重启虚拟机,将失效 iptables -I INPUT -p TCP –dport 80 -j ACCEPT        永久有效 # 在防火墙中开放80端口 firewall-cmd –permanent –zone=public –add-port=80/tcp # 重新加载防火墙配置…

    Nginx 2023年4月10日
    00
  • nginx中封禁ip和允许内网ip访问的实现示例

    想要在nginx中封禁IP并允许内网IP访问,可以通过配置nginx的访问控制模块实现。接下来我将给出两个实例。 实例一:封禁指定IP 在nginx的配置文件中加入以下配置: http { deny 111.222.333.444; } 其中111.222.333.444为要封禁的IP地址。 重新加载nginx配置文件 在Linux系统中,使用如下命令: n…

    Nginx 2023年5月16日
    00
  • nginx负载均衡下的webshell上传如何实现

    这篇文章主要介绍“nginx负载均衡下的webshell上传如何实现”,在日常操作中,相信很多人在nginx负载均衡下的webshell上传如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nginx负载均衡下的webshell上传如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! 场景描述 假定在真实生产环境中,…

    2023年4月10日
    00
  • Linux下安装nginx

    之前用过windows系统上的nginx,今天尝试着在linux (CentOS7.2)下安装nginx成功。记录一下。 Nginx的下载 Nginx包下载地址:http://nginx.org/download/nginx-1.8.0.tar.gz Nginx依赖包下载地址(到对应的网站下载即可): 1.gzip模块需要zlib库(在http://www.…

    2023年4月9日
    00
  • nginx中判断输入ip是否和配置ip在同一个网段

    根据input_ip & net_mask == seted_ip & net_mask 来判断。 详见代码: 1 typedef struct { 2 ngx_uint_t ip[4]; 3 ngx_uint_t mask[4]; 4 } ngx_stream_eth_netSegment_t; 5 6 7 typedef struct {…

    Nginx 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部