Nginx:将所有子域重写为www除了一个?

时间:2012-05-22 14:58:57

标签: configuration nginx rewrite

假设我有一对服务器,由于部署方式,需要使用相同的nginx.conf。其中一台服务器位于staging.someserver.com,另一台服务器位于www.someserver.com

我想要的是单个重写行或if条件,它会将域上的所有内容(主要是http上的www和非www,以及https上的非www)重定向到https://www.someserver.com/,以及{http://staging.someserver.com/ 1}}重定向到https://staging.someserver.com/,但不会重定向到https://www.someserver.com/。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这是关于Nginx配置的一个技巧:HTTP块的第一个服务器块将是“默认”配置。

因此,您可以在第一个服务器块中重定向所有内容,并使用您的www创建另一个服务器块。配置!

这是最佳解决方案。

答案 1 :(得分:-2)

我不知道这是否是最好的方法,但我想出了一些东西:

server {
    listen 443 default deferred;

    # ...

    if ($host !~ (staging)|(www).*)
        rewrite ^(.*) https://www.someserver.com$1 permanent;
    }
}

server {
    listen 80;

    # ...

    if ($host !~ staging.*) {                                   
        rewrite ^(.*) https://www.someserver.com$1 permanent;    
    }                                                           
    if ($host ~ staging.*) {                                    
        rewrite ^(.*) https://staging.someserver.com$1 permanent;
    }                                                           
}