首页 > 解决方案 > Nginx 替换主机名中的字符

问题描述

我有这样的网址:

我希望 nginx 替换点“。” 主机名的子域部分中的字符由破折号“-”表示,因此这将导致:

我已经有一个服务器块,可以在“前缀”变量中捕获带有点的 url,但我找不到任何关于如何重写 url 的文档,以便在不使用 lua/...的情况下替换“前缀”中的字符:

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";
}

非常感谢愿意为此提供帮助的人们!

标签: nginxredirectreplaceurl-rewritinghostname

解决方案


使用地图捕获子域:

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;
    }
}

推荐阅读