Nginx通配符子域重定向到非www

时间:2015-12-21 23:34:51

标签: redirect ssl nginx no-www

我设置了一个域,其中包含用于白标签访问的通配符子域。我正在努力防止人们输入http://www.subdomain.domain.com/,但却在努力寻找解决方案。 (我已经在重写中总是使用安全协议。)

我目前的设置是这个(嗯,相关部分):

server {
    listen 80;
    server_name  domain.com *.domain.com;
    rewrite ^ https://$http_host$request_uri? permanent;
}

server {
    listen 443;
    ssl on;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate.key;
    server_name domain.com *.domain.com;

    ...
}

我取得的成就是http://domain.comhttp://sub.domain.com都重定向到https协议,换句话说分别是https://domain.comhttps://sub.domain.com。我仍然希望在顶部实现的目标是http://www.domain.comhttps://www.domain.com重定向到https://domain.com并且http://www.sub.domain.comhttps://www.sub.domain.com重定向到{{1同样。

有人可以帮忙吗?

(PS:我甚至考虑应用全局nginx设置来删除同一服务器上同时运行的所有域的URL的https://sub.domain.com部分,如果这是一个选项。)

1 个答案:

答案 0 :(得分:1)

要从请求的服务器名称中删除前导if序列,请将此if ($http_host ~* ^www\.(.*)$ ) { return 301 $scheme://$1$request_uri; } 块放在SSL服务器容器顶部附近(在任何其他URI处理指令之前):

if

一般{{1}} should be used very carefully,但在这种情况下完全没问题。