第五十五集 Nginx服务的跳转Rewrite和正则表达式

本文详细介绍了Nginx的Rewrite模块和Location配置,包括URL重写、正则表达式、重定向、flag标记及其执行顺序。通过Rewrite可以实现动态URL伪装成静态、域名跳转等需求,而Location则用于控制访问权限和反向代理。Rewrite与Location的结合使用,使得Nginx能够灵活地处理HTTP请求,优化网站性能和用户体验。
摘要由CSDN通过智能技术生成


Rewrite实际场景

配置跳转的原因

为了让URL看起来更规范、合理
企业会将动态URL地址伪装成静态地址提供服务
网址换新域名后,期望用户可以通过旧的访问跳转到新的域名上
服务端某些业务调整

Nginx跳转需求的实现方式

使用rewrite进行匹配跳转(主要匹配的是具体的路径)
使用if匹配全局变量后跳转,结合布尔值时间true和fales的跳转
使用location匹配再跳转(可以匹配后执行proxy_pass,将请求跳转到其他服务上)

rewrite如何实现跳转

nginx服务基于http协议rewrite重写mudule模块
nginx:主从URL重写,其中有一个布尔值:返回值的结果只有true或者false;同时特性:只支持if单分支语句
跳转:循环最多可以执行10次,超过后nginx将返回500错误
PCRE支持:perl兼容正则表达式的语法规则匹配
重写模块set指令:自己设置即可以使用布尔值
如下:标志位参数:$1:具体的路径,即标志位
www.baidu.com/bbs/install/index.php ##URL
www.baidu.com ##URI $0
/bbs/install/index.php ## $1

rewrite功能

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求

rewrite生效位置

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,
例如http:/ /www.da.com/a/we/ index。php?id=1&u=str 只对/a/we/ index . php重写

Nginx正则表达式元字符

^ :匹配输入字符串的其实位置
$ :匹配输入字符串的结束位置
* :匹配前面额字符零次或多次
+ :匹配前面的字符一次或多次
? :匹配前面的字符零次或一次
. :表示任意单个字符
\ :转义符
\d:匹配纯数字
\w :匹配字母、数字、下划线、汉字
\s :匹配任意空白符
\b :匹配单词的开始或结束
{n} :重复n次
{n,} :重复n次或更多次
[c] :匹配单个字符c
[a-z] :匹配a-z小写字母的任意一个
[a-zA-Z] :匹配a-z小写字母或A-Z大写字母的任意一个
() :表达式的开始和结束位置
| :或运算符

Rewrite命令

rewrite [flag];
#regex :正则
#replacement :跳转后的内容
#flag :rewrite支持的flag标记,对此条匹配结果进行标记

flag标记说明

last :相当于Ppache的[L]标记,表示完成rewrite
break :本条规则匹配完成即终止,不再匹配后面的任何规则
redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url
permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url
last和break的区别:

使用场景: last一般写在server和if中,break一般使用再location中
URL匹配: last不终止重写后的url匹配,break终止重写后的url匹配,配置文件中有多个location匹 配,其中last不影响后面的匹配,而break则终止后面的匹配,其匹配顺序有优先级

rewrite执行顺序

http {
	server {
		rewrite								#优先级为1,最先执行
	  location ~*\.(jpg|gif|swf)$ {			
	  	rewrite								#优先级为2
	  		vald_referers none blocked *.whd.com whd.com;
	  		if ( $infalid_referer ) {
	  			rewrite ^/ http://www.whd.com/crror.png;		#优先级为3
	  			}
	  		}
	  	}
	  }

location分类

精准匹配:location = / {…} 示例:location = patt {} PS: 精确匹配字符串
一般匹配:location / {…} 示例:location patt {} PS:只要包含patt的字符串即可
正则匹配: location ~ / {…} 示例:location~patt{}PS:按照正则表达式的方式匹配
~:表达的意思首先是可以支持正则表达式,其次是区分大小写

location 优先级

:精确匹配
^~:前缀匹配
和*:按文件中的顺序的正则匹配;这里区分匹配是文件还是目录
文件:优先级高于
目录:优先级高于

普通匹配:以xxx路径为前缀的匹配
/:通用匹配

Rewrite和Location的小结

相同点:都能实现跳转
不同点:
rewrite是在同一域名内更改获取资源的路径
location是对一类路径做控制访问或反向代理,还可以 proxy_ pass到其他机器
rewrite会写在location里,执行顺序
执行server块里面的rewrite指令
执行location匹配
执行选定的location中的rewrite指令

基于域名的跳转

vim /etc/hosts		#添加映射
192.168.8.151 www.zsx.com www.cc.com
mkdir -p /var/log/nginx/
vim /usr/local/nginx/conf/nginx.conf		##修改配置文件
server {
      	  listen       80;
      	  server_name  www.zsx.com;		##域名修改
#charset koi8-r;
 access_log  /var/log/nginx/www.zsx.com-access.log;		##开启并对日志保存路径进行修改
location / {						##在原有location位置插入
     		   if ($host = 'www.zsx.com'){	##$host为rewrite全局变量,代表请求主机头字段或主机名
           	     rewrite ^/(.*)$ http://www.cc.com/$1 permanent; ##$1为匹配的位置变量,即域名后面的字符串,同时永久跳转;(.*)
             	   }
        	    root   html;
         	   index  index.html index.htm;
     	   }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值