Nginx正则表达式与Nginx rewrite重写功能的介绍
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章将为大家详细讲解有关Nginx正则表达式与Nginx rewrite重写功能的介绍,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、 Rewrite 跳转实
千家信息网最后更新 2025年12月01日Nginx正则表达式与Nginx rewrite重写功能的介绍
这篇文章将为大家详细讲解有关Nginx正则表达式与Nginx rewrite重写功能的介绍,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一、 Rewrite 跳转实现
服务协议功能模块
url 资源定位路径
- nginx----支持url重写、支持if条件判断,但不支持else
- 跳转----循环最多可以执行10次,超过后nginx将返回500代码错误
- rewrite----使用nginx'全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向
二、Rewrite 使用场景 - 使用rewrite进行匹配跳转
- 使用if匹配全局变量后跳转
- 使用location匹配再跳转
1.rewrite放在 server{},if{},location{}段中
2.对域名或参数字符串:使用if全局变量匹配、使用proxy_pass反向代理
三、nginx正则表达式
常用的正则表达式元字符
四、Rewrite 命令
location分类
正则匹配的常用表达式
五、location优先级
按优先级排列: - = 类型
- ^~ 类型表达式
- 正则表达式(和)类型
- 常规字符串匹配类型,按前缀匹配
- 通用匹配(/),如果没有其他匹配,任何请求都会匹配到
location优先级规则(从高到低排列)
1.匹配某个具体的文件 - location = 完整路径
- location ^~ 完整路径
- location ~* 完整路径
- location ~ 完整路径
- location 完整路径
- location /
2.用目录做匹配访问某个文件 - location = 目录
- location ^~ 目录
- location ~ 目录
- location ~* 目录
- location 目录
location /
六、应用场景测试
公司旧域名 www.domain.com 因业务需求有变更,需要使用新域名 www.newdomain.com 代替,不能废除旧域名,从旧域名跳转到新域名,且保持其参数不变[root@localhost bin]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm获取http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm警告:/var/tmp/rpm-tmp.IHyTHc: 头V4 RSA/SHA1 Signature, 密钥 ID 7bd9bf62: NOKEY准备中... ################################# [100%]正在升级/安装...1:nginx-release-centos-7-0.el7.ngx ################################# [100%][root@localhost bin]# yum install nginx -y[root@localhost ~]# mkdir /abc[root@localhost ~]# mount.cifs //192.168.56.1 /mntPassword for root@//192.168.254.10/linuxs: [root@localhost ~]# cd /abc/LNMP-C7/LNMP-C7/[root@localhost LNMP-C7]# lsDiscuz_X3.4_SC_UTF8.zipmysql-boost-5.7.20.tar.gzncurses-5.6.tar.gznginx-1.12.2.tar.gzphp-5.6.11.tar.bz2php-7.1.10.tar.bz2php-7.1.20.tar.bz2php-7.1.20.tar.gzzend-loader-php5.6-linux-x86_64_update1.tar.gz[root@localhost LNMP-C7]# tar -zxvf nginx-1.12.2.tar.gz -C /opt[root@localhost LNMP-C7]# useradd -M -s /sbin/nologin nginx[root@localhost LNMP-C7]# cd /opt/nginx-1.12.2/[root@localhost nginx-1.12.2]# lsauto CHANGES.ru configure html man srcCHANGES conf contrib LICENSE README[root@localhost nginx-1.12.2]# yum install gcc gcc-c++ pcre pcre-devel make zlib-devel -y[root@localhost nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module[root@localhost nginx-1.12.2]# make && make install[root@localhost conf]# vim nginx.conf37 server_name www.accp.com;41 access_log logs/www.accp.com/access.log main;[root@localhost conf]# yum install bind -y[root@localhost conf]# vim /etc/named.conf 13 listen-on port 53 { any; };21 allow-query { any; };[root@localhost conf]# vim /etc/named.rfc1912.zones 25 zone "accp.com" IN {26 type master;27 file "accp.com.zone";28 allow-update { none; };29 };[root@localhost conf]# cd /var/named/[root@localhost named]# lsdata named.ca named.localhost slavesdynamic named.empty named.loopback[root@localhost named]# cp -p named.localhost accp.com.zone[root@localhost named]# vim accp.com.zone www IN A 192.168.247.202[root@localhost named]# systemctl start named[root@localhost named]# systemctl stop firewalld.service [root@localhost named]# setenforce 0[root@localhost named]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/[root@localhost named]# cd /usr/local/nginx/[root@localhost nginx]# lsconf html logs sbin[root@localhost nginx]# cd logs/[root@localhost logs]# mkdir www.accp.com[root@localhost logs]# lserror.log www.accp.com[root@localhost logs]# nginx [root@localhost logs]# netstat -natp | grep 80tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6打开win10客户机,配置dns服务器,并使用域名访问。
[root@localhost logs]# vim /usr/local/nginx/conf/nginx.conf location / { #域名重定向' if ($host = 'www.accp.com') {' rewrite ^/(.*)$ http://www.kgc.com/$1 permanent;' } root /html; index index.html index.htm; }[root@localhost logs]# vim /etc/named.rfc1912.zones zone "kgc.com" IN { type master; file "kgc.com.zone"; allow-update { none; };};[root@localhost logs]# cd /var/named/[root@localhost named]# lsaccp.com.zone dynamic named.empty named.loopbackdata named.ca named.localhost slaves[root@localhost named]# cp -p accp.com.zone kgc.com.zone[root@localhost named]# systemctl restart named[root@localhost named]# killall -1 nginx[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf37 server_name bbs.accp.com;42 location /post {43 rewrite (.+) http://www.accp.com/bbs$1 permanent;44 }[root@localhost html]# cd -/var/named[root@localhost named]# vim accp.com.zone [root@localhost named]# cat accp.com.zone $TTL 1D@ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimumNS @A 127.0.0.1bbs IN A 192.168.247.202[root@localhost named]# killall -3 nginx[root@localhost named]# nginx[root@localhost named]# systemctl restart named
基于客户端IP访问跳转[root@localhost named]# vim /usr/local/nginx/conf/nginx.conf42 #设置是否合法的IP标志43 set $rewrite true;44 #判断是否为合法IP,是否是允许的IP45 if ($remote_addr = "192.168.247.139"){46 set $rewrite false;47 }48 #不被允许的IP进行判断,打上标记49 if ($rewrite = true){50 rewrite (.+) /maintenance.html;51 }52 #匹配标记进行跳转站点53 location = /maintenance.html {54 root html;55 }[root@localhost named]# cd /usr/local/nginx/html/[root@localhost html]# ls50x.html index.html[root@localhost html]# vim maintenance.html[root@localhost html]# killall -3 nginx [root@localhost html]# nginx
基于参数匹配的跳转---跳转到首页[root@localhost named]# vim /usr/local/nginx/conf/nginx.conf37 server_name www.accp.com;42 if ($request_uri ~ ^/100-(100|200)-(\d+).html$){43 rewrite (.*) http://www.accp.com permanent;44 }[root@localhost named]# vim accp.com.zone [root@localhost named]# cat accp.com.zone $TTL 1D@ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimumNS @A 127.0.0.1www IN A 192.168.247.202[root@localhost named]# systemctl restart named[root@localhost named]# killall -3 nginx[root@localhost named]# nginx
基于目录下所有PHP文件跳转[root@localhost named]# vim /usr/local/nginx/conf/nginx.conf42 location ~* /upload/.*\.php$ {43 rewrite (.+) http://www.accp.com permanent;44 }[root@localhost named]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@localhost named]# killall -3 nginx[root@localhost named]# nginx
基于最普通URL请求的跳转--跳转到首页[root@localhost named]# vim /usr/local/nginx/conf/nginx.conf42 location ~* ^/abc/123.html {43 rewrite (.+) http://www.accp.com permanent;44 }
基于最普通URL请求的跳转--跳转到首页[root@localhost named]# vim /usr/local/nginx/conf/nginx.conf42 location ~* ^/abc/123.html {43 rewrite (.+) http://www.accp.com permanent;44 }[root@localhost named]# killall -3 nginx[root@localhost named]# nginx
表达式
域名
正则
目录
路径
变量
类型
功能
优先级
全局
参数
文件
首页
支持
合法
普通
内容
场景
字符
字符串
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界服务器管理员账号
华三服务器接口图
电脑访问服务器账户和密码错误
修改数据库硬件和软件的区别
竹溪公司软件开发服务保障
兴化威力网络技术价目表
数据库简单软件
搭建本地网站服务器费用
l4d2官方服务器
港风滤镜软件开发
吧台设计图软件开发
杭州app软件开发机构
网络自动化设备软件开发
服务器 修改密码
doaj数据库
orical数据库优化
互联网科技人才创新能力
统计信息在数据库的作用
网络安全大学毕业好找工作吗
普陀区营销软件开发厂家价格
广东开票软件的安全服务器地址
centos7邮件服务器
java服务器集群搭建
软件开发流程敏捷开发
cct服务器出现错误是怎么回事
建模软件开发算法模型
原神用什么服务器要好一点
三门峡软件开发
上海开展网络安全教育活动
手机远程访问公司云服务器