在同一服务器块中重写NGINX通配符

在同一服务器块中重写NGINX通配符,nginx,url-rewriting,rule,Nginx,Url Rewriting,Rule,我找不到我正在尝试的特定重写规则的示例 我想有一个重写规则,只为子域输入例如 -> 从我一直尝试的内容来看,这似乎是我得到的最接近的代码 server_name example.com; if ($host = *.example.com) return 301 https://example.com/directory1/directory2/$1; } 请看以下文档: 这将是一个解决方案: server_name .example.com; if ($host

我找不到我正在尝试的特定重写规则的示例

我想有一个重写规则,只为子域输入例如

->

从我一直尝试的内容来看,这似乎是我得到的最接近的代码

server_name example.com;

if ($host = *.example.com) 
    return 301 https://example.com/directory1/directory2/$1;   
}

请看以下文档:


这将是一个解决方案:

server_name .example.com;
if ($host ~ ^(?<sub>.+)\.example\.com$) {
    return 301 http://example.com/directory1/directory2/$sub;
}
server_name ~^(?<sub>.+)\.example\.com$;
return 301 http://example.com/directory1/directory2/$sub;
server_name.example.com;
if($host~^(?.+)\.example\.com$){
返回301http://example.com/directory1/directory2/$sub;
}

这将是另一个解决方案:

server_name .example.com;
if ($host ~ ^(?<sub>.+)\.example\.com$) {
    return 301 http://example.com/directory1/directory2/$sub;
}
server_name ~^(?<sub>.+)\.example\.com$;
return 301 http://example.com/directory1/directory2/$sub;
server\u name~ ^(?.+)\.example\.com$;
返回301http://example.com/directory1/directory2/$sub;


哪种解决方案更好?很难说-这取决于您接收的流量模式,以及在同一侦听句柄上配置的其他服务器。

上述内容的可能重复工作非常完美,我尝试将其更改为重写而不是返回,这样我就不会获得对子域无效的ssl证书。有没有办法绕过这个问题?我认为您不应该在这里使用重写(如果您需要请求URI,请使用
$request\u URI
);但是SSL的两种方式都没有区别;显然,您必须为所有子域提供适当的证书,才能在没有警告的情况下工作(或者干脆不要使用SSL!)。