Todos os domínios devem estar no certificado SSL ao canonizar domínios através do redirecionamento 301 de HTTP para HTTPS no Apache?

2

Eu tenho alguns domínios apontando para o mesmo servidor. Apenas um desses domínios (o principal) está realmente no meu certificado SSL. Eu incluí o seguinte no meu arquivo httpd.conf por algum tempo para que todos eles redirecionem permanentemente para um único domínio.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com$1 [R=301,L]

A intenção é que todos os domínios DEVEM 301 redirecionar para www.example.com como HTTPS. No entanto, notei recentemente que esses redirecionamentos estão ocorrendo - mas como um redirecionamento 302. Eu tentei uma verificação de sanidade aqui e parece funcionar como eu esperava que deveria.

Então, para recapitular:

O que acontece: http://sub1.example.com resulta em um redirecionamento 302 para https://www.example.com .

O que deve acontecer: http://sub1.example.com resulta em um redirecionamento 301 para https://www.example.com .

Minha pergunta é, todos os domínios devem estar listados no certificado SSL para que tal redirecionamento ocorra como um 301? Eu estou apenas puxando canudos aqui.

Apenas para completar, aqui estão os cabeçalhos de solicitação / resposta da página inicial e da página de destino quando isso ocorre.

Solicitar cabeçalho para a página inicial ( sub1.example.com ):

GET / HTTP/1.1
Host: sub1.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

Cabeçalho de resposta da página inicial ( sub1.example.com ):

HTTP/1.1 302 Found
Date: Wed, 04 Oct 2017 21:05:16 GMT
Server: Apache
Location: https://www.example.com/
Cache-Control: max-age=1
Expires: Wed, 04 Oct 2017 21:05:18 GMT
Content-Length: 212
Keep-Alive: timeout=5, max=150
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

Solicitar cabeçalho para a página de destino ( www.example.com ):

GET / HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Cookie: <redacted>

Cabeçalho de resposta da página de destino ( www.example.com ):

HTTP/1.1 200 OK
Date: Wed, 04 Oct 2017 21:05:16 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=150
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
    
por d.lanza38 04.10.2017 / 23:28

1 resposta

3

Se você estiver vendo um redirecionamento 302, parece que "alguma outra coisa" está acionando esse redirecionamento. O código que você postou, se for executado, é claramente um 301.

must all domains be listed on the SSL certificate in order for such a redirect to occur as a 301?

Não, desde que você esteja apenas redirecionando de HTTP - como seus exemplos parecem mostrar.

Se seus outros domínios não estivessem listados no certificado SSL, você obviamente teria problemas ao tentar redirecionar de https://otherdomain.com/... , já que a solicitação nunca chegaria ao seu servidor (a menos que o usuário aceitasse o certificado inválido).

    
por 05.10.2017 / 00:46