WordPress.org incentiva SSL

Como mudar um site WordPress de HTTP para HTTPS passo a passo

Este pequeno guia tem como objectivo explicar como fazer a alteração do protocolo http para https numa instalação WordPress já existente.

Utilizarei como domínio exemplo “www.dominio.pt” mas poderia ser qualquer outro, com ou sem www.

Se seguirem estes passos correctamente, não é necessário qualquer plugin específico para que o WordPress funcione em https.

1. Testar o certificado

Depois de instalado certificado SSL no servidor/alojamento (fora do âmbito deste guia), há que o testar e garantir que funciona devidamente, sem avisos no browser.

Para isso basta abrir um URL estático com o protocolo https, por exemplo o license.txt do WordPress, em https://www.dominio.pt/license.txt. Se o WordPress estiver instalado noutra pasta, é necessário adaptar este URL.

Se não há avisos, neste momento temos a certeza que o certificado SSL se encontra correctamente configurado e podemos avançar para o passo seguinte.

2. Alterar o URL na base de dados do WordPress

Este é o ponto mais crítico, mas nem por isso complicado. Escusado será dizer que antes de avançar é essencial fazer um backup da base de dados.

O que há a perceber é que alterar o protocolo de http para https numa instalação WordPress não é muito diferente de alterar o URL quando, por exemplo, movemos um site de um endereço de desenvolvimento ou staging para produção.

Basicamente temos de fazer um “serialized search and replace” na base de dados de http://www.dominio.pt para https://www.dominio.pt (sem barra no final).

Fizeste dump da base de dados e estás a fazer o search/replace no teu editor favorito? Pára com isso, agora! A sério, pára! “Ah, mas eu já fiz assim e correu tudo bem” – Arquivar em “developer famous last words”.

O WordPress, os seus plugins e temas, bem como outros sistemas de gestão de conteúdos (CMS), utilizam por vezes a base de dados para guardar configurações em arrays ou objectos devidamente “serializados” (transformados numa string). Não entrando em muitos detalhes, se se efectuar um search/replace de alguma informação dentro destes arrays ou objectos, o mais provável é que se destrua essa mesma informação.

Existem várias formas de fazer este search/replace correctamente, mas como este guia é dirigido a todo o tipo de utilizadores, mesmo os principiantes que provavelmente nem terão acesso shell ao alojamento, vou referir um método mais simples.

Nota: Devem antes de mais garantir que as constantes WP_HOME e WP_SITEURL não estão a ser forçadas no wp-config.php, ou seja, que nesse ficheiro não existem instruções semelhantes a:

define('WP_HOME','http://...');
define('WP_SITEURL','http://...');

1) Instalar e activar o pluginBetter Search Replace

2) Ir a Ferramentas – Better Search Replace e preencher o formulário em conformidade (sem barra no final dos URLs) e inactivando a opção “Run as dry run?”:

Se tudo correr bem,  serão reencaminhados para o ecrã de login, já que o URL do site foi entretanto alterado e a sessão deixou de ser válida.

Alternativas à utilização do plugin “Better Search Replace”:

Nota: No caso do website em causa ter WPML, Multisite ou CDN com vários (sub-)domínios, será necessário repetir este passo para todos os (sub-)domínios que vão ser alterados de http para https.

3. Mixed Content?

Teoricamente, nesta fase, o site deverá estar a funcionar em https, mas poderão existir plugins ou temas que não usem as melhores práticas de programação e sejam apresentados erros de “mixed content” ao navegar no site.

É portanto necessário navegar exaustivamente no site e garantir que em todas as páginas é apresentado o cadeado verde na barra de endereço, não existindo erros de “mixed content”.

Caso existam erros deste tipo, é necessário analisar o código fonte (HTML) da página em questão, procurar por http:// e tentar resolver caso a caso (fora do âmbito deste guia).

Exemplos de casos em que poderá ser necessária intervenção externa:

  • Plugins que incorrectamente carregam recursos em http;
  • Sistemas de publicidade que não estejam a ser carregados, ou não suportem sequer, em https;
  • Widgets com conteúdos de terceiros;
  • Conteúdos embed;

4. Já está? Quase. Falta o redireccionamento 301

É de referir que o WordPress, por si só, trata da grande maioria destes redireccionamentos, pelo que este passo pode ser opcional. De qualquer forma, fica a informação e eu faço-o sempre.

Agora que já temos o website a funcionar devidamente sobre SSL, há que garantir que a navegação no mesmo é sempre efectuada desta forma. Além disso é necessário “informar” os motores de busca de que o nosso URL mudou.

Para isso basta adicionar a seguinte regra no .htaccess, caso utilize o Apache:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Se não utiliza o Apache, peça ajuda ao seu fornecedor de alojamento para criação desta regra de redireccionamento.

O que é importante é que não se configure este redireccionamento sem ter a certeza que já não existe “mixed content”, por exemplo, no corpo de posts e páginas do website, ou esta regra poderá mascarar esse problema e ficamos numa situação em que, para cada recurso, são feitos mais requests ao servidor do que os necessários (o original em http e o redireccionamento para https).

Também não é má ideia, neste momento, fazer as devidas alterações de URL no Google Analytics e Google Search Console.

32 pensamentos sobre “Como mudar um site WordPress de HTTP para HTTPS passo a passo

  1. Show, quebrei a cabeça para tentar resolver, com a dica do Plugin foi excelente. Parabéns funcionou no meu caso WordPress 4.7 e PHP5.6. Valeu.

  2. Olá boa noite. Efectuei os passos com sucesso. No entanto, neste momento o que está acontecer é: só funciona a homepage, todas as outras páginas, apesar de terem o cadeado verde, tem um 404. O que fazer? site: all4running.pt.
    Agradeço antecipadamente a V/ ajuda.

  3. Muito obrigado!!!!! Estava com problemas no SSL pois as imagens não ficaram em HTTPS, e não exibia o cadeado verde SEGURO…. Com o plugin better search replace deu certinho, alterou tudo que estava carregando em http e mudou para https… FUNCIONOU PERFEITAMENTE. OBRIGADOO!

  4. para mim só funcionou quando eu mudei o campo


    if ( !defined( 'FORCE_SSL_ADMIN' ) ) {
    if ( 'https' === parse_url( get_option( 'siteurl' ), PHP_URL_SCHEME ) ) {
    define( 'FORCE_SSL_ADMIN', false );
    } else {
    define( 'FORCE_SSL_ADMIN', false);
    }
    }

    colocando os dois como false.
    ai no cliente tudo esta com ssl e no admin tem alguns arquivos sem, sem fazer isso ficar em loop de redirecionamento.

    1. Amigo, estou com o mesmo problema, porem nao tentendo tanto de programação, esse codigo e posto onde ?
      tenho que alterar algo nele.

  5. Olá! Gostei muito do tutorial. Ainda não me pus a mudar de http para https, porque sou novato e tenho uma dúvida.

    No ponto 2, dizem para se fazer uma backup (cópia de segurança) da base de dados. Mas como é que eu faço isso? E, se correr mal, como é que reponho a base de dados? Já agora, estamos a falar de que base de dados?

    Onde se faz esse “serialized search and replace”? Onde está essa base de dados?

    Será que podem explicar-me tudo do zero, pois como já disse sou novato e não percebo nada disso.

    Obrigado pela atenção e pelas respostas.

    Já agora aproveito para deixar uma dica: seria interessante se fizessem um tutorial mais pormenorizado, recorrendo a prints (imagens), para pessoas que não entendem nada do assunto, pois como eu há muito mais pessoas interessadas em saber isso.

    1. Cópia de segurança: o seu host deve ter ferramentas para o fazer e para fazer reposição caso seja necessário.

      Serialized search and replace: é o que o guia explica como fazer.

      Explicar do zero: é o que o guia explica como fazer.

      Não me parece possível ser muito mais pormenorizado.

      1. Realmente, essa é uma boa questão. Deveria ser feito um tutorial com todos os passos e, se possível para todos entenderem, a explicar como se faz backup (cópias de segurança) das bases de dados, como se repõe esse backup.
        Além do mais, como existem várias empresas que alojam sites, deveria ser explicado em cada uma das plataformas. Isto é, por exemplo, na empresa X usam o CPanel, na empresa Y usam outra plataforma.
        Deveria ser feito um tutorial a explicar em cada uma das situações.

        Porquê tudo isso?
        Existem muitas outras pessoas que, com a “facilidade” de hoje em dia comprar um domínio e começar o seu site em WordPress, pode até nem ter conhecimentos de construcção de sites (HTML, PHP, etc.) e se lançam na blogosfera, só para terem o seu “cantinho”. Até o dia em que corre tudo “bem”.

        No meu ver
        Seria sensato, pessoas que dominam esta área (de preferência os profissionais), criarem esse tipo de tutoriais, tal como eu já referi, explicando tudo de A a Z, não se esquecendo de “traduzir” os termos inglês para português, e tentar (sempre que possível) colocar tudo em português.

        Fica aqui esta minha dica. Um abraço e boa continuação de artigos.

        1. Desculpe Rui, mas estou totalmente em desacordo.

          Se este artigo cobrisse a questão dos backups com várias soluções e em vários paineis de controlo, provavelmente bateria alguns recordes em termos de tamanho do artigo.

          Este tipo de tutoriais não devem ir a esse detalhe. Cada utilizador poderá consultar outros tutoriais, específicos do seu caso, relativamente aos pontos onde este não é detalhado, por exemplo na questão dos backups, ou das particularidades do seu painel de controlo.

    1. Olá Luciano,
      Há certificados que são gratuitos, como o Let’s Encrypt, e certificados pagos. Nestes, há diversos preços dependendo das características e benefícios de cada certificado.
      Aquele que deves escolher depende das necessidades do teu site.
      Se o teu serviço de alojamento não oferecer a possibilidade de instalar o Let’s Encrypt, terás de o instalar tu próprio ou pedir a alguém que o faça.

  6. Perfeitas as dicas, ajudaram muito e resolveu o problema. Agora o site está totalmente seguro. O que salvou foi o Better Search Replace!

  7. Devem antes de mais garantir que as constantes WP_HOME e WP_SITEURL não estão a ser forçadas no wp-config.php, ou seja, que nesse ficheiro não existem instruções semelhantes a:

    define(‘WP_HOME’,’http://…’);
    define(‘WP_SITEURL’,’http://…’);

    NO meu caso está definição existe e quando deleto não consigo acessar o interface administrativa para depois executar o plugin.

    Como fazer neste caso?

  8. Meu site inteiro saiu do ar após rodar o plugin, além disso o link de acesso ao admin não funciona mais também.

    Alguém pode me ajudar?
    Como posso resolver?

    Obrigado.

Leave a Reply