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, saberá escolher um endereço principal, encaminhar todas as variantes para ele com um único redirecionamento e detetar e corrigir 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 está acessível através de quatro endereços:
http://example.com
http://www.example.com
https://example.com
https://www.example.comPara um visitante isso é indiferente, 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 sessão) valem por nome: quem inicia sessão em www não tem sessão iniciada no domínio sem www. Por isso, escolha um endereço canónico (o endereço principal) e faça o redirecionamento dos outros três para ele.
Qual escolhe é uma questão de gosto (lição 2.1). O importante é que o endereço principal seja o mesmo em todo o lado: no DNS, no certificado, em Opções > Geral (lição 3.1) e nos redirecionamentos.
Redirecionamento 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 que 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 inverso) |
| 308 | Permanente, e o método (por exemplo, o envio de um formulário) mantém-se | Também pode ser usado para este fim; navegadores e motores de pesquisa tratam-no como um 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 temporário, continuam a memorizar o endereço antigo.
Tenha também atenção à cadeia. Suponha que o seu endereço principal é https://example.com. Nesse caso, 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 só passo. O que acontece muitas vezes:
http://www.example.com 301 https://www.example.com/
https://www.example.com 301 https://example.com/Isto funciona, mas custa um passo adicional (mais tempo de espera, sobretudo em dispositivos móveis) e um handshake 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 indica "demasiados redirecionamentos". Nesse caso, há duas definições a trabalhar uma contra a outra. Certifique-se de que existe apenas uma parte a redirecionar para https (o servidor web ou o painel) e de que os endereços no WordPress já correspondem ao endereço principal.
O próprio WordPress também faz redirecionamentos: se alguém pedir https://www.example.com/contact/ e o endereço do site for 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 isso inseguro, porque esses elementos podem ser alterados pelo caminho.
- Scripts, folhas de estilos e iframes através de http são bloqueados pelos navegadores. O seu site fica então com um aspeto danificado ou uma funcionalidade deixa de funcionar.
- Imagens, áudio e vídeo através de http: os navegadores modernos tentam obtê-los automaticamente através de https; se isso falhar, são bloqueados. O cadeado pode então mostrar um aviso.
De onde vem:
- Ligações antigas no seu conteúdo: um site que antes estava em http tem
<img src="http://example.com/wp-content/uploads/...">em milhares de artigos. O WordPress guarda essas ligações literalmente na base de dados. - Definições de temas ou 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 através de http. Esses têm de ser substituídos ou removidos.
- Endereços em Opções > Geral que ainda estão em http (lição 3.1).
Como encontrá-lo
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 pesquise no código-fonte da página (Ctrl+U) por src="http:// e href="http://. Ligações para outros sites em texto normal (<a href="http://...">) não causam conteúdo misto; o que conta são os elementos que a página carrega.
Pesquisar e substituir, mas da forma correta
A solução para ligações antigas no seu conteúdo é substituir todos os http://example.com na base de dados por https://example.com. A tentação é usar um comando SQL como:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com');Não faça isso. Muitas definições de temas, plugins e widgets são guardadas de forma serializada. Têm este aspeto:
s:27:"http://example.com/logo.png";O s:27 significa: segue-se um texto de 27 caracteres. Após uma substituição simples, o texto passa a ter 28 caracteres (foi acrescentado um s), mas continua a indicar 27. O PHP deixa então de conseguir ler o valor e a definição desaparece sem aviso: um menu vazio, um logótipo desaparecido, widgets que sumiram.
Utilize uma ferramenta que atualize esses comprimentos e faça sempre primeiro uma cópia de segurança (lição 8.1): pesquisar e substituir não tem reciclagem.
- WP-CLI: primeiro verificar, depois executar. No terminal, vá para a pasta do seu WordPress e execute primeiro o teste (primeira linha) e só depois a substituição real (segunda linha).
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guidCom --dry-run vê quantas substituições seriam feitas por tabela, sem alterar nada. --skip-columns=guid deixa intactos os identificadores fixos dos artigos (coluna guid); o WordPress recomenda nunca os alterar. Sem opção adicional, o WP-CLI só atua nas tabelas do WordPress. Se um plugin tiver tabelas próprias com o mesmo prefixo, acrescente --all-tables-with-prefix. Use --all-tables apenas se souber porquê: isso afeta todas as tabelas da base de dados, incluindo as de outro site ou aplicação.
- Um plugin de pesquisa e substituição que suporte dados serializados (há vários no diretório de plugins de wordpress.org). Também aí, use primeiro o modo de teste e remova o plugin depois.
Nunca substitua algo como example.com sem http:// ou https:// antes: assim afetaria também endereços de e-mail e outros textos. O procedimento completo, também para quem não tem terminal, está no artigo da base de conhecimento sobre pesquisar e substituir na base de dados do WordPress (ver Leitura adicional).
Na prática: o aspeto num painel
Como exemplo, usamos o DirectAdmin. Outros painéis têm uma opção semelhante para "usar sempre https".
- Nas definições do domínio, ative Forçar o uso de SSL (https) (lição 3.1).
- Escolha no domínio se o www deve ir para o domínio sem www ou o inverso (no DirectAdmin, nas definições do domínio; caso contrário, com um redirecionamento através de Config. redirecionamentos do site ou
.htaccess). - Verifique a cadeia com o exercício abaixo ou com as ferramentas de programador 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 só passo.
- Deixe apenas uma parte redirecionar para https; caso contrário, obtém um ciclo.
- Conteúdo misto é uma página https que carrega elementos através de http; a consola do navegador mostra quais.
- As ligações antigas na base de dados substituem-se com
wp search-replaceou um plugin que compreenda dados serializados, nunca com um REPLACE simples em SQL. - Primeiro sempre uma cópia de segurança e primeiro um teste (
--dry-run); deixe a colunaguidintacta e limite-se às tabelas do WordPress.
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 é bom se: as quatro chegarem ao mesmo endereço com https, com no máximo um redirecionamento por variante e apenas códigos permanentes (301 ou 308). Em seguida, o programa lê o HTML da página inicial e procura scripts, folhas de estilos, imagens, iframes e tipos de letra carregados através de 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: redirecionar um domínio ou uma página
- Pesquisar e substituir na base de dados do WordPress
- Redirecionar obrigatoriamente os visitantes para https
- Curso gratuito de DNS 3.4: www, redirecionamento e o que o DNS não faz
- Conteúdo misto (MDN, em inglês): https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
- wp search-replace (developer.wordpress.org, em inglês): https://developer.wordpress.org/cli/commands/search-replace/
