Url rewriting 如何匹配此位置Nginx

Url rewriting 如何匹配此位置Nginx,url-rewriting,nginx,Url Rewriting,Nginx,所以我有这样一个位置:someplacecat.com 某个地方是动态的和不同的。 我想把它重写到someplace.ourdomain.com 所以我写了这个位置块: 位置~*cat.*{ 重写^$scheme://$1.ourdomain$2$request\u uri; } 但我无法使其匹配,我在这里做错了什么?设法使用if块解决它,但如果有人知道我在位置块上做错了什么,请告诉我 if ($host ~* (.*)cat\.(.*)) { set $subdomain $1;

所以我有这样一个位置:someplacecat.com 某个地方是动态的和不同的。 我想把它重写到someplace.ourdomain.com

所以我写了这个位置块:

位置~*cat.*{ 重写^$scheme://$1.ourdomain$2$request\u uri; }


但我无法使其匹配,我在这里做错了什么?

设法使用if块解决它,但如果有人知道我在位置块上做错了什么,请告诉我

if ($host ~* (.*)cat\.(.*)) {
    set $subdomain $1;
    set $tld $2;
    rewrite ^ $scheme://$subdomain.ourdomain.$tld$request_uri;
}

设法解决它使用一个if块,但如果有人知道我的位置块做错了什么,请让我知道

if ($host ~* (.*)cat\.(.*)) {
    set $subdomain $1;
    set $tld $2;
    rewrite ^ $scheme://$subdomain.ourdomain.$tld$request_uri;
}

位置块的问题

location ~ (.*)cat(.*) { rewrite ^ $scheme://$1.ourdomain$2$request_uri; }
是因为rewrite指令将反向引用重置为其第一个参数的反向引用,所以您需要在重写之前保存它们,如下所示:

location ~ (.*)cat(.*) { 
  set $subdomain $1; 
  set $tld $2;
  rewrite ^ $scheme://$subdomain.ourdomain.$tld$request_uri; 
}

这与您在下面的anwser中使用if块所做的差不多,否则它也会有相同的问题:

位置块的问题

location ~ (.*)cat(.*) { rewrite ^ $scheme://$1.ourdomain$2$request_uri; }
是因为rewrite指令将反向引用重置为其第一个参数的反向引用,所以您需要在重写之前保存它们,如下所示:

location ~ (.*)cat(.*) { 
  set $subdomain $1; 
  set $tld $2;
  rewrite ^ $scheme://$subdomain.ourdomain.$tld$request_uri; 
}

这与您在下面anwser中使用if块时所做的差不多,否则它也会有相同的问题:

Nice。。。Nginx if是专门为这类事情设计的。很好。。。Nginx if是专门为这类事情设计的,但它不起作用。似乎它从未进入位置块。上面我的位置块和下面解决它的if块中的regexp之间的regexp存在差异,这可能就是问题所在?我用~匹配区分大小写,而不是用~*匹配不区分大小写,而且我没有多余的\。在那之后,我担心它仍然不起作用。只是为了不捕捉最后一个组中tld之前的时间段,为了清楚起见。只是计算出来:位置匹配在$request\u uri上,该uri不包括$host,而下面的if块与$host匹配。因此,无法输入位置块。我打了我的头,我早就应该注意到这一点了:但它不起作用。似乎它从未进入位置块。上面我的位置块和下面解决它的if块中的regexp之间的regexp存在差异,这可能就是问题所在?我用~匹配区分大小写,而不是用~*匹配不区分大小写,而且我没有多余的\。在那之后,我担心它仍然不起作用。只是为了不捕捉最后一个组中tld之前的时间段,为了清楚起见。只是计算出来:位置匹配在$request\u uri上,该uri不包括$host,而下面的if块与$host匹配。因此,无法输入位置块。我打了我的头,早该注意到的:D