Nginx替换主机名中的字符



我有这样的url:

  • https://foo.somedomain.com
  • https://foo.bar.somedomain.com
  • https://foo.bar.baz.somedomain.com
  • 等等

我想让nginx替换点";用破折号"-"表示主机名的子域部分中的字符,因此这将导致:

  • https://foo.somedomain.com
  • https://foo-bar.somedomain.com
  • https://foo-bar-baz.somedomain.com
  • 等等

我已经有一个服务器块,捕获带有"前缀"中的点的url。变量,但我找不到任何关于如何重写url的文档,以便替换"前缀"中的字符。

:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name "~^(?<prefix>[w.]+).somedomain.com$";
rewrite 302 "$scheme://What do i put in here?.somedomain.com$request_uri";
}

非常感谢那些试图帮助我的人!

您可以单独捕获.的两侧,例如:

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ~^([^.]+).([^.]+).([^.]+).example.com$;
...
return 302 $scheme://$1-$2-$3.example.com$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ~^([^.]+).([^.]+).example.com$;
...
return 302 $scheme://$1-$2.example.com$request_uri;
}

使用映射来捕获子域:

map $host $resub {
~^([^.]+).([^.]+).somedomain.com$ $1-$2;
~^([^.]+).([^.]+).([^.]+).somedomain.com$ $1-$2-$3;
~^([^.]+).([^.]+).([^.]+).([^.]+).somedomain.com$ $1-$2-$3-$4;
~^([^.]+).([^.]+).([^.]+).([^.]+).([^.]+).somedomain.com$ $1-$2-$3-$4-$5;
# etc.
}
server {
server_name  *.somedomain.com;
if ($resub) {
return 302 $scheme://$resub.somedomain.com$request_uri;
}
}

相关内容

  • 没有找到相关文章

最新更新