重写 uri 以删除 nginx 中的 www

重写 uri 以删除 nginx 中的 www

我有未知数量的域名与类似 的模式匹配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。

相关内容