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

NGINX wildcard rewrite in same server block

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

例如,我希望仅针对输入的子域设置重写规则。

https://sub.example.com/ -> https://example.com/directory1/directory2/sub

从我一直在尝试的情况来看,这看起来是我得到的最接近的代码。

server_name example.com;

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

查看文档:


这是一个解决方案:

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;

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