我有未知数量的域名与类似 的模式匹配www.abc123.example.com
。其中“abc”后面的数字是未知的。我想也许我可以使用正则表达式的重写规则~*(www\.abc\w+)
就像是:
server_name ~*(www\.abc\w+)
rewrite ~*(www\.abc\w+)\.example\.com (abc\w+)\.example\.com;
不幸的是,这似乎不起作用,uri 也没有改变。我的其他想法可能是尝试设置/重写 $uri 值,但我也没有成功。
我不确定我是否无法匹配 uri 值或无法重写 uri(或两者兼而有之)。
我可以发现这一点:
if ($host ~* ^www\.(.*)) {
set $host_without_www $1;
rewrite ^(.*) http://$host_without_www$1 permanent;
}
不幸的是,这会重写所有“www”流量,而不仅仅是 www.abc123。任何帮助都值得感激。谢谢。
答案1
尝试以下方法:
server {
server_name ~ ^www\.(?<newdomain>abc[0-9]+\.example\.com)$;
return 301 https://$newdomain$request_uri;
}
这将匹配 domains www.abcN.example.com
,其中N
是一个或多个数字。正则表达式将捕获该部分并将其abcN.example.com
放入变量中$newdomain
。
然后在返回语句中,我们使用之前捕获的变量和请求的 URI 部分构建目标 URL。