子域的Nginx变量?

时间:2017-07-26 06:11:42

标签: redirect nginx

我需要Guru的建议。

在Nginx的conf文件中,我想将子域名作为变量,以便重定向访问,如下所示。

  • 访问:http://userX.example.com/?hoo=bar
  • REDIRECT:http://example.com/userX/?hoo=bar

但是我得到了

  • REDIRECT:http://example.com/userX.example.com/?hoo=bar

我当前的_http.conf设置如下所示。显然它的确如此。

## default HTTP
server {
    listen       80;
    server_name  default_server;
    return       301 http://example.com/$host$request_uri;
}

下面是否有任何变量或方法?

## default HTTP
server {
    listen       80;
    server_name  default_server;
    return       301 http://example.com/$subdomain$request_uri;
}

我知道如果子域部分是有限的,它可以被重定向,但我必须每次都添加它们,我希望它尽可能简单。

有没有简单的方法呢?

[ENV] :CentOS:7.3.1611,nginx:nginx / 1.13.3,* .example.com定位到NS设置中的同一台服务器。

结论(2017/12/13)

使用正则表达式:

server {
    listen       80;
    server_name  ~^(?<subdomain>.+)\.example\.com$;
    return       301 http://example.com/$subdomain$request_uri;
}

参考:CommentDocument

1 个答案:

答案 0 :(得分:8)

您可以使用server_name中的正则表达式来提取您需要的部分作为命名捕获。例如:

server {
    listen       80;
    server_name  ~^(?<name>.+)\.example\.com$;
    return       301 http://example.com/$name$request_uri;
}

有关详情,请参阅this document