nginx rewrite后变量设置失效

本文介绍了在移动端访问PC站点时,通过Nginx进行自动跳转到移动端站点的配置问题。问题在于rewrite规则后,set指令未生效。分析发现rewrite会直接匹配location,导致set定义的变量未被使用。解决方案是将set指令放入location块内,或者通过include引入单独的配置文件,确保变量设置在正确的位置执行。
摘要由CSDN通过智能技术生成

项目场景:

移动端访问Pc站,由nginx实现自动跳转


问题描述

使用移动端访问,并未实现跳转

server {
	listen 12700;
	server_name 127.0.0.1;
	
	## rewrite
	rewrite ^/$ /a last;
	
	## 变量
	set $to_mobile 'https://m.xx.cn';
	
	location /a {
		if ($to_mobile != '') {
			return 200 "[1] --- $to_mobile";
		}
		
		return 200 "[2] --- $to_mobile";
	}

}

原因分析:

1.移动端访问“/a",返回[1],结果ok;
2.移动端访问“/”,返回[2],与预期不一致。
二者的区别在于是否rewrite,按测试结果分析,可以得出结论:
rewrite后并不会执行下面的set代码块,而是直接匹配location


解决方案:

将set代码块,放在location下,如:

	location /a {
		## 变量
		set $to_mobile 'https://m.xx.cn';
		
		if ($to_mobile != '') {
			return 200 "[1] --- $to_mobile";
		}
		
		return 200 "[2] --- $to_mobile";
	}

实际项目中,一般有多个location,可以将set代码块写在单独的文件中,通过include引入,如:
to_mobile.conf

set $to_mobile 'https://m.xx.cn';

nginx.conf

location /a {
	## 变量
	include to_mobile.conf;
	...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值