Evitar redirecionamento duplo NGINX

1

Estou redirecionando os usuários do meu site para a versão HTTPS do site usando um redirecionamento 301 com o Nginx.
Testei meu site usando o PageSpeed do Google e descobri que estava redirecionando duas vezes da página principal. Isso é por causa do meu CMS. Exemplo:
http: // domain.tld - > NGINX 301 - > para https: // domain.tld - > Redirecionamento do CMS - > https: // domain.tld / homepage

Eu estava esperando que eu pudesse redirecionar o link direto usando NGINX com

location = / {
    return 301 https:// domain.tld/homepage;
}

isso funciona para a home page, no entanto, isso dará erros 404 a qualquer outra página http que não a página inicial, tentei adicionar return 301 https://$host$request_uri; no bloco de localização, mas de alguma forma isso substitui a regra de domínio raiz. (que dão um redirecionamento duplo novamente) Existe alguma maneira de redirecionar todos os links com seus respectivos request_uri, EXCEPT para o domínio raiz?

P.S. Eu esperava fazer isso sem uma função if : consulte: link



Aqui está uma amostra do meu arquivo de configuração completo:

server {
    listen       80;
    server_name  domainname.tld;

    location = / {
        return 301 https://domainname.tld/homepage;
    }

    return 301 https://$host$request_uri; 
    #if i remove this I'll get 404 errors on any other page than the homepage.
    #but if I add it, the 'location = /' block gets ignored.
}

server {

    listen 443 ssl;

    server_name domainname.tld;

    root /var/www/domainname.tld;
    index index.php;

    ... (stuff like rewrite rules, irrelevant) ...

}
    
por StackerStan 14.09.2016 / 13:22

2 respostas

0

Basta envolvê-lo em um bloco location / { ... } para dar prioridade igual:

server {
    listen       80;
    server_name  domainname.tld;

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

Veja este documento para detalhes.

    
por 14.09.2016 / 15:30
0

Você pode usar uma expressão regular para corresponder apenas à URL raiz, assim.

    location ~ ^/$ {
        return 301 https://domainname.tld/homepage;
    }

No entanto, é melhor mantê-lo com um código 301 redirecionando apenas para o site HTTPS e um código 302 da raiz do site HTTPS para /homepage . Você não deseja que os mecanismos de pesquisa armazenem em cache um redirecionamento permanente de 301. É uma má ideia, porque é provável que essa página mude eventualmente.

    
por 14.09.2016 / 15:05