Nginx: redireciona as raízes http e https para o subdiretório

2

Estou tentando redirecionar o domínio raiz para http e https em nginx para o mesmo subdiretório (https):

Então, por exemplo.

http://example.com -> https://example.com/subdirectory

https://example.com -> https://example.com/subdirectory

Tão simples quanto isso me pareceu, estou lutando para conseguir isso. Eu tentei usar variações de reescritas e retornar 301, mas sempre acabo com um loop de redirecionamento.

Minha configuração atual (causando o loop):

server {
        listen      80;
        server_name example.com;
        return 301 https://$server_name/subdirectory;
        }
server {
        listen 443 ssl spdy;
        server_name example.com;
        return 301 https://$server_name/subdirectory;
    }

Então, basicamente, estou tentando redirecionar para o mesmo subdiretório em https do domínio raiz, se o domínio raiz é solicitado via http ou https.

    
por Elijah Paul 29.09.2014 / 10:11

3 respostas

7

Esta configuração fará o que você quiser:

server {
    listen 80:
    server_name example.com;

    return 301 https://$server_name/subdirectory;
}

server {
    listen 443;
    server_name example.com;

    location = / {
        return 301 https://$server_name/subdirectory;
    }
}

Os especificadores = / significam uma correspondência completa, portanto, corresponde apenas ao URI raiz exato do servidor virtual.

    
por 29.09.2014 / 13:38
0

Obviamente, não funcionará se você não excluir o subdiretório de local deste comportamento para o ssl vhost.

server {

    listen 80;
    server_name example.com;

    return 301 https://$server_name/subdirectory;

}

server {

    listen 443 ssl spdy;
    server_name example.com;

    location /subdirectory {
        # Your stuff
    }

    location = / {
        return 301 https://$server_name/subdirectory;
    }

}
    
por 29.09.2014 / 11:45
0
server {
    listen 80:
    server_name example.com;

    return 301 https://$server_name/subdirectory/;
}

server {
    listen 443;
    server_name example.com;

    location = / {
        return 301 https://$server_name/subdirectory/;   
    }
}

Veja como adicionei a barra final no final, isso é muito importante, caso contrário, você obterá loops de redirecionamento.

    
por 26.01.2015 / 20:55