我有这样的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;
}
}