Rootop 服务器运维与web架构

关于nignx中正则括号捕获组

server
{
    listen       80 default_server;
    server_name  ~^(\w+\.)?(test\.com)$;

    root /www/$1$2;
    set $san $1;
    set $er  $2;


    location ~* \.(jpeg|png|gif|jpg)$
	#location /
    {
		types {}
		default_type text/html;
		echo $san "</br>";
		echo $er  "</br>";
		echo $1   "</br>";
		echo $2   "</br>";
		echo $uri;
    }
    
}


# 当访问 http://img.test.com/1.txt 时,返回404错误,日志中报错:
 open() "/www/img.test.com/1.txt" failed (2: No such file or directory)
 说明正则匹配的值为img.test.com($1=img. $2=test.com)去/www/目录下寻找此目录
 
# 当访问 http://img.test.com/1.jpeg 时,页面返回内容:
img.
test.com
jpeg

/1.jpeg
可以发现$2为空,猜测可能是因为出现第二个正则匹配并捕获内容导致$2变为未定义变量(并不知道真实原因是什么,只是猜测)。
因为第一个捕获组定义了,但是没有定义第二个捕获组。

当注释掉location ~* \.(jpeg|png|gif|jpg)$ 开启 #location / 时,则echo的内容全部返回。
如果想用之前的变量可以通过set设置自定义变量。

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5312.html

作者:Venus

服务器运维与性能优化

评论已关闭。