Módulo 3 · 3.2
www, redirecionamento e conteúdo misto
Módulo 3: Endereço, https e utilizadores · Tempo de leitura: 9 minutos
Objetivo de aprendizagem: Depois desta lição, conseguirá escolher um endereço principal, redirecionar todas as variantes para esse endereço com um único redirecionamento e detetar e resolver conteúdo misto.
Conceitos-chave: endereço canónico, 301 e 308, cadeia de redirecionamentos, conteúdo misto (mixed content), pesquisar e substituir na base de dados, dados serializados
Quatro endereços, um site
O seu site pode ser acedido através de quatro endereços:
http://example.com
http://www.example.com
https://example.com
https://www.example.comPara um visitante isso não faz diferença, mas para os motores de pesquisa são quatro endereços diferentes com o mesmo conteúdo. Também os cookies (como o seu cookie de início de sessão) aplicam-se por nome: quem inicia sessão em www não fica autenticado no domínio sem www. Por isso, escolha um endereço canónico (o endereço principal) e redirecione os outros três para lá.
A escolha é uma questão de preferência (lição 2.1). O importante é que o endereço principal seja igual em todo o lado: no DNS, no certificado, em Opções > Geral (lição 3.1) e nos redirecionamentos.
Redirecionar com um 301, num só passo
Um redirecionamento é uma resposta do servidor: "esta página está noutro sítio". O navegador vai então automaticamente para o novo endereço. O código indica o tipo de redirecionamento:
| Código | Significado | Utilização |
|---|---|---|
| 301 | Movido permanentemente | A escolha habitual para http para https e para www para o domínio sem www (ou o contrário) |
| 308 | Permanente, e o método (por exemplo, um envio de formulário) mantém-se igual | Também pode ser usado para este fim; os navegadores e motores de pesquisa tratam-no como 301 |
| 302 ou 307 | Temporário | Apenas para algo realmente temporário, como uma página de manutenção |
Um redirecionamento permanente indica aos motores de pesquisa que o novo endereço é o verdadeiro. Com um redirecionamento temporário, estes continuam a guardar o endereço antigo.
Preste também atenção à cadeia. Suponha que o seu endereço principal é https://example.com. Então pretende:
http://www.example.com 301 https://example.com/
http://example.com 301 https://example.com/
https://www.example.com 301 https://example.com/
https://example.com 200Cada variante chega ao endereço principal num único passo. O que acontece frequentemente é:
http://www.example.com 301 https://www.example.com/
https://www.example.com 301 https://example.com/Isto funciona, mas implica um passo extra (tempo de espera adicional, sobretudo em dispositivos móveis) e um aperto de mão TLS adicional. Pior ainda é um ciclo: o servidor web redireciona para https, o WordPress redireciona de volta para http porque os endereços nas opções ainda estão em http, e o navegador assinala "demasiados redirecionamentos". Nesse caso, duas configurações estão a entrar em conflito. Certifique-se de que apenas uma entidade redireciona para https (o servidor web ou o painel) e que os endereços no WordPress já estão definidos no endereço principal.
O WordPress também efetua os seus próprios redirecionamentos: se alguém solicitar https://www.example.com/contact/ enquanto o endereço do site é https://example.com, o WordPress redireciona para https://example.com/contact/. Isto só funciona se o pedido chegar ao WordPress, ou seja, se o servidor web também encaminhar o nome www para este site.
Conteúdo misto
Conteúdo misto (mixed content) é uma página https que carrega elementos através de http://: uma imagem, uma folha de estilos, um script, um tipo de letra ou um vídeo incorporado. O navegador considera isto inseguro, porque esses elementos podem ser alterados durante o percurso.
- Scripts, folhas de estilos e iframes via http são bloqueados pelos navegadores. O seu site pode então parecer avariado ou uma funcionalidade pode não funcionar.
- Imagens, áudio e vídeo via http são automaticamente tentados obter através de https pelos navegadores modernos; se isso não resultar, são bloqueados. O cadeado pode então mostrar um aviso.
De onde isto provém:
- Links antigos no seu conteúdo: um site que anteriormente estava em http tem em milhares de artigos
<img src="http://example.com/wp-content/uploads/...">. O WordPress guarda esses links literalmente na base de dados. - Configurações do tema ou de plugins com um endereço completo, por exemplo um logótipo ou fundo com
http://. - Elementos externos de outro site que só estão acessíveis via http. Estes devem ser substituídos ou removidos.
- Endereços em Opções > Geral que ainda estão em http (lição 3.1).
Como encontrar
Abra a página, prima F12 e veja o separador Consola. O navegador indica cada conteúdo misto com o endereço do elemento. Ou procure no código-fonte da página (Ctrl+U) por src="http:// e href="http://. Links para outros sites em texto normal (<a href="http://...">) não constituem conteúdo misto; trata-se de elementos que a página carrega.
Pesquisar e substituir, mas da forma correta
A solução para links antigos no seu conteúdo é substituir todos os http://example.com na base de dados por https://example.com. A tentação é usar uma instrução SQL como:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com');Não faça isso. Muitas configurações de temas, plugins e widgets estão guardadas de forma serializada. Isto tem o seguinte aspeto:
s:27:"http://example.com/logo.png";O s:27 significa: segue-se um texto de 27 caracteres. Depois de uma substituição direta, o texto passa a ter 28 caracteres (adicionou-se um s), mas continua a indicar 27. O PHP já não consegue ler o valor e a configuração desaparece silenciosamente: um menu vazio, um logótipo desaparecido, widgets perdidos.
Utilize uma ferramenta que atualize esses comprimentos:
- WP-CLI: primeiro verificar, depois executar.
wp search-replace 'http://example.com' 'https://example.com' --all-tables --dry-run
wp search-replace 'http://example.com' 'https://example.com' --all-tablesCom --dry-run vê quantas substituições haveria por tabela, sem alterar nada.
- Um plugin de pesquisar e substituir que suporte dados serializados (existem vários na pasta de plugins de wordpress.org). Remova o plugin depois de o utilizar.
Faça sempre primeiro uma cópia de segurança (lição 8.1). Nunca substitua também algo como example.com sem o http:// à frente: isso afeta também endereços de e-mail e outros textos.
Na prática: o aspeto num painel
Como exemplo, utilizamos o DirectAdmin. Outros painéis têm um interruptor semelhante para "sempre https".
- Ative Forçar o uso de SSL (https) nas opções do domínio (lição 3.1).
- Escolha, nas configurações do domínio, se o www deve ir para o domínio sem www ou o contrário (no DirectAdmin nas opções do domínio; caso contrário, através de um redirecionamento via Config. redirecionamentos do site ou
.htaccess). - Verifique a cadeia com o comando abaixo ou com as ferramentas de desenvolvimento do seu navegador (separador Rede, opção "Preservar registo").
Resumo
- Escolha um endereço canónico e faça com que as outras três variantes cheguem lá com um 301 (ou 308), num único passo.
- Deixe apenas uma entidade redirecionar para https; caso contrário, obtém um ciclo.
- Conteúdo misto é uma página https que carrega elementos via http; a consola do navegador mostra quais.
- Links antigos na base de dados devem ser substituídos com
wp search-replaceou um plugin que compreenda dados serializados, nunca com um REPLACE SQL direto. - Faça sempre primeiro uma cópia de segurança e primeiro uma ronda de teste.
Questionário
Exercício
Exercício A3.2: Um endereço principal e nenhum conteúdo misto. Introduza o seu domínio. O programa abre as quatro variantes (http e https, com e sem www) e segue os redirecionamentos. O resultado ideal é: todas as quatro chegam ao mesmo endereço com https, com no máximo um redirecionamento por variante e apenas com códigos permanentes (301 ou 308). Depois, o programa lê o HTML da página inicial e procura scripts, folhas de estilos, imagens, iframes e tipos de letra carregados via http://.
Leitura adicional
Estes artigos descrevem os passos nos painéis da WebOké; noutros painéis funcionam de forma semelhante.
- Manual DirectAdmin 6.4: Enviar sempre os visitantes para https
- Manual DirectAdmin 4.7: Config. redirecionamentos do site: reencaminhar um domínio ou página
- Redirecionar visitantes obrigatoriamente para https
- Curso gratuito de DNS 3.4: www, redirecionamento e o que o DNS não faz
- Conteúdo misto (MDN, inglês): https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
- wp search-replace (developer.wordpress.org, inglês): https://developer.wordpress.org/cli/commands/search-replace/
