【问题标题】:Nginx Replace characters in hostnameNginx 替换主机名中的字符
【发布时间】:2021-10-23 17:50:10
【问题描述】:

我有这样的网址:

我希望 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";
}

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

【问题讨论】:

    标签: nginx redirect replace url-rewriting hostname


    【解决方案1】:

    使用地图捕获子域:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多