使用ssl nginx将旧域重定向到新域

时间:2017-07-17 12:38:13

标签: .htaccess ssl nginx

我正在尝试将旧的ssl域重定向到新的ssl域。但它正在向我发送重定向循环。

我在nginx虚拟主机中试过这个配置。

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name example.com www.example.com old-domain.com; 
    rewrite ^ https://www.example.com$request_uri permanent;
}

server {
    #SSL Configuration
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
        include snippets/ssl-example.com.conf;
        include snippets/ssl-params.conf;

    root /home/username/example/public;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com old-domain.com;

    rewrite ^ https://www.example.com$request_uri permanent;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        location ~ /\.ht {
            deny all;
        }
}

请指导我如何解决此问题。

1 个答案:

答案 0 :(得分:0)

在您的问题中,第二个rewrite语句导致重定向循环。正确的解决方案是将server块拆分为两个并从一个块重定向到另一个,就像从http重定向到https一样。您可以使用第一个server块来实现此目的。

server的{​​{1}}块不需要default_server指令,因为它无论如何都会响应所有不匹配的服务器名称。有关详细信息,请参阅this document

假设这些是此配置中唯一的server_name服务器,并且两个https块共享相同的SSL配置(如您的评论所示),则可以将片段文件移到上方以便< em>两个server块继承了。

最后,主server块中的server_name指令仅列出要重定向的的服务器名称。

例如:

server