Pesquisa de site

Como redirecionar www para não-www com Apache no CentOS 7


Introdução

Muitos desenvolvedores da Web precisam permitir que seus usuários acessem seu site ou aplicativo por meio do subdomínio www e do domínio raiz (não www). Ou seja, os usuários devem ter a mesma experiência ao visitar www.my-website.com e my-website.com. Embora existam muitas maneiras de configurar isso, a solução mais amigável para SEO é escolher qual domínio você prefere - o subdomínio ou o domínio raiz - e fazer com que o servidor web redirecione os usuários que visitam o outro para o domínio preferido.

Existem muitos tipos de redirecionamento HTTP, mas, neste cenário, é melhor usar um redirecionamento 301, que informa aos clientes: O site que você solicitou mudou permanentemente para outro URL. Vá para lá. Depois que o navegador recebe o código de resposta HTTP 301 do servidor, ele envia uma segunda solicitação para a nova URL fornecida pelo servidor e o usuário é apresentado ao site, provavelmente sem perceber que foi redirecionado.

Por que não configurar seu servidor da Web para servir apenas o mesmo site para solicitações de ambos os nomes de domínio? Isso pode parecer mais fácil, mas não confere as vantagens de SEO do redirecionamento 301. Um redirecionamento permanente informa aos rastreadores do mecanismo de pesquisa que existe um local canônico para o seu site e isso melhora as classificações de pesquisa desse URL.

Neste tutorial, você configurará um redirecionamento 301 usando o Apache no CentOS 7. Se você estiver executando o Nginx em vez do Apache, consulte este tutorial: Como redirecionar www para não-www com Nginx no CentOS 7

Pré-requisitos

Para concluir este tutorial, primeiro você precisa:

  • Privilégios de superusuário no servidor que está executando o Apache. Se você ainda não configurou, siga nosso guia Configuração inicial do servidor com o CentOS 7.
  • Apache instalado e configurado para atender seu site. Siga este tutorial para fazer isso: How to Install the Apache Web Server on CentOS 7.
  • Um nome de domínio registrado. Se você ainda não tem um, pode obter um gratuitamente neste artigo de nossa documentação mostra como fazer isso.

Vamos começar configurando seus registros DNS.

Etapa 1 — Configurando registros DNS

Primeiro, você precisa apontar www.my-website.com e my-website.com para seu servidor executando o Apache. (O resto do tutorial assume que seu domínio é my-website.com. Substitua-o por seu próprio domínio onde quer que você o veja abaixo.) Você fará isso criando um registro DNS A para cada nome que aponta para o endereço IP do seu servidor Apache.

Abra o console da Web do seu provedor de DNS. Este tutorial usa o DNS da DigitalOcean.

No formulário Adicionar um domínio, digite seu nome de domínio registrado no campo de texto e clique em Adicionar domínio. Isso abrirá a página do novo domínio, onde você pode visualizar, adicionar e excluir registros do domínio.

Em Create new record, digite \@ no campo de texto HOSTNAME. Este é um caractere especial que indica que você está adicionando um registro para o nome do domínio raiz, um registro para simplesmente my-website.com. No campo de texto WILL DIRECT TO, insira o endereço IPv4 público do seu servidor e clique em Create Record. (Não é necessário alterar o TTL.)

Para seu segundo registro DNS, você pode usar um registro CNAME em vez de um registro A. Um registro CNAME é um alias que aponta para outro nome em vez de um endereço IP. Você poderia criar um CNAME que direcionasse www.my-website.com para my-website.com, e qualquer solicitação HTTP para o subdomínio www encontraria seu caminho para o seu servidor já que você acabou de criar o registro A para o domínio raiz. Mas, para simplificar, basta criar outro registro A como o primeiro, digitando \www no campo HOSTNAME e o endereço IP público do servidor no campo WILL DIRECT TO.

Quando você tiver criado os dois registros, deve se parecer com isto:

Com os dois registros em vigor, as solicitações da Web para my-website.com e www.my-website.com devem chegar ao seu servidor Apache. Agora vamos configurar o servidor.

Etapa 2 — Configurando o redirecionamento no Apache

O Apache Web Server fornece dois módulos para ajudá-lo a configurar redirecionamentos: mod_alias e mod_rewrite. Embora mod_rewrite seja mais poderoso, mod_alias é mais simples de entender e usar. Se você precisar redirecionar solicitações contendo strings de consulta específicas, por exemplo, ou cabeçalhos HTTP, precisará usar mod_rewrite. Muitos escolhem mod_rewrite por seus recursos de correspondência de expressão regular, que faltam em mod_alias. Mas, para o caso simples de redirecionar todas as solicitações de www.my-website.com para my-website.com, mod_alias servirá. (O próprio Apache recomenda escolher mod_alias quando possível, dizendo que escolher mod_rewrite quando é desnecessário \leva a configurações que são confusas, frágeis e difíceis de manter.)

O módulo deve ser ativado por padrão no CentOS 7, mas para verificar novamente, execute este comando:

  1. httpd -M | grep alias_module

Se alias_module (shared) aparecer na saída, o módulo já está ativado. Caso contrário, ative-o anexando esta linha a /etc/httpd/conf.modules.d/00-base.conf:

  1. echo “LoadModule alias_module modules/mod_alias.so” | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf

Com mod_alias ativado, você pode usar as diretivas Redirect, RedirectMatch e outras listadas nos documentos mod_alias em seu Configuração do Apache.

Agora vamos configurar seus VirtualHosts.

Conforme informado nos Pré-requisitos, você já deve ter seu site configurado no Apache. Ele pode ser configurado no arquivo de configuração principal do Apache (/etc/httpd/conf/httpd.conf) ou talvez em seu próprio arquivo (por exemplo, /etc/httpd/conf.d/ meu-website.com.conf). Se você usou o Apache Install Guide vinculado nos Pré-requisitos para configurar seu VirtualHosts, ele pode estar em um arquivo como /etc/httpd/sites-available/my-website. com.conf. Onde quer que seu site principal esteja configurado, abra esse arquivo no vi ou em seu editor favorito (yum install nano, se preferir):

  1. sudo vi /etc/httpd/conf/httpd.conf

Procure por qualquer diretiva ServerAlias definida no VirtualHost. Se você encontrar uma linha com ServerAlias definido como www.my-website.com, remova essa linha. (Ou, se essa linha contiver muitos aliases em uma lista separada por vírgulas, remova apenas www.my-website.com da lista.) Você precisa remover esse alias porque você vai criar um VirtualHost separado para o subdomínio contendo nada além de ServerName e o Redirect. O VirtualHost principal do site não atenderá mais às solicitações de www.my-website.com.

Agora crie um VirtualHost em um arquivo separado (por exemplo, /etc/httpd/conf.d/www.my-website.com.conf) :

  1. sudo vi /etc/httpd/conf.d/www.my-website.com.conf

Cole o seguinte conteúdo no arquivo, substituindo my-website.com pelo seu próprio nome de domínio:

<VirtualHost *:80>
    ServerName www.my-website.com
    Redirect permanent / http://my-website.com/
</VirtualHost>

Salve e saia quando terminar. Se você criou este arquivo em /etc/httpd/sites-available, conforme nosso Guia de instalação do Apache, crie um link simbólico para o arquivo em /etc/httpd/sites-enabled/:

  1. sudo ln -s /etc/httpd/sites-available/www.my-website.com.conf /etc/httpd/sites-enabled/

Este novo VirtualHost configura o Apache para enviar um redirecionamento 301 de volta para qualquer cliente que solicite www.my-website.com e os direciona para visitar my-website.com em vez disso. O redirecionamento preserva o URI da solicitação, de modo que uma solicitação para http://www.my-website.com/login.php será redirecionada para http://my-website.com /login.php.

Nota: se o VirtualHost principal do seu site contiver um ServerAlias com um subdomínio curinga—*.my-website.com—você deve considerar removê-lo e criando um novo VirtualHost como o que você acabou de criar para cada subdomínio que deseja redirecionar. Se você não deseja redirecionar todos os subdomínios e precisa que alguns deles continuem sendo atendidos pelo VirtualHost principal, é melhor nomear explicitamente cada subdomínio como um alias, especialmente agora que você tem um subdomínio cujas solicitações você não deseja que correspondam inadvertidamente ao VirtualHost principal. (Você pode nomear cada subdomínio em sua própria linha ServerAlias ou nomeá-los todos como uma lista separada por vírgulas em uma linha ServerAlias.)

Se você deve manter o ServerAlias para *.my-website.com, certifique-se de que o Apache carregue o novo www VirtualHost antes do principal um, porque se o principal for carregado primeiro, o Apache o usará para lidar com solicitações de www.my-website.com, pois esse nome corresponde ao alias curinga. Execute o seguinte comando para ver qual VirtualHost será carregado primeiro quando você reiniciar o Apache:

  1. httpd -S

Procure as linhas contendo namevhost my-website.com e namevhost www.my-website.com. Se a linha www aparecer primeiro, está tudo pronto. Se o VirtualHost para o domínio raiz aparecer primeiro, entretanto, existem algumas maneiras de fazer o Apache carregar o www primeiro:

  1. Se seu VirtualHost principal estiver contido em um arquivo (por exemplo, /etc/httpd/conf/httpd.conf) que usa o Include ou IncludeOptional para incluir o diretório que contém seu novo www VirtualHost, basta mover a linha Include acima do VirtualHost principal > dentro do arquivo.
  2. Se seu VirtualHost principal e seus novos arquivos www VirtualHost estiverem no mesmo diretório (por exemplo, /etc/httpd/conf.d/), você pode forçar o Apache a carregar o www primeiro renomeando os arquivos e acrescentando alguns números aos nomes dos arquivos. Anexe 01- ao nome do arquivo www VirtualHost (por exemplo, /etc/httpd/conf.d/01-www.my-website.com. conf) e 02- ao nome do arquivo principal VirtualHost (por exemplo, /etc/httpd/conf.d/02-my- website.com.conf).

Execute httpd -S novamente para garantir que www VirtualHost apareça primeiro.

Quando estiver pronto, reinicie o Apache:

  1. sudo systemctl restart httpd

Antes de visitar www.my-website.com em seu navegador, faça uma solicitação usando curl em seu servidor ou em sua máquina local (se curl está instalado localmente):

  1. curl -IL http://www.my-website.com

O sinalizador -I diz ao curl para mostrar apenas os cabeçalhos da resposta do servidor. O sinalizador -L diz ao curl para obedecer a qualquer redirecionamento do servidor, fazendo automaticamente uma segunda solicitação, desta vez para a URL fornecida em Location cabeçalho (assim como faria um navegador da web). Como você configurou o redirecionamento 301, curl deve fazer duas solicitações e você deve ver apenas os cabeçalhos das duas respostas:

Output
HTTP/1.1 301 Moved Permanently Date: Tue, 03 Jan 2023 19:24:44 GMT Server: Apache/2.4.53 Location: http://my-website.com/ Content-Type: text/html; charset=iso-8859-1 HTTP/1.1 200 OK Date: Tue, 03 Jan 2023 19:24:44 GMT Server: Apache/2.4.53 Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT ETag: "39-5eecb7ed6bfc9" Accept-Ranges: bytes Content-Length: 57 Content-Type: text/html; charset=UTF-8

Na resposta 301 (Moved Permanently) à solicitação original para http://www.my-website.com, observe o penúltimo cabeçalho: Location: http://my- website.com. A segunda resposta é da solicitação de acompanhamento de curl para o URL fornecido no cabeçalho Location e, se seu site estiver íntegro, o servidor deve ter respondido com 200 (OK) .

Finalmente, visite http://www.my-website.com em seu navegador. Pisque e você perderá o redirecionamento. Seu site deve aparecer como de costume, mas olhe novamente em sua barra de endereços e observe que o \www está faltando no URL. A maioria dos usuários nunca notará isso e, portanto, eles terão a mesma experiência como se tivessem solicitado http://my-website.com.

Conclusão

Neste tutorial, você adicionou dois registros DNS para seu site e configurou o Apache para redirecionar um domínio secundário para seu domínio preferido. Agora seu site pode ser acessado por meio de ambos os domínios. Talvez já fosse antes de você ler este tutorial; talvez você o estivesse servindo diretamente de ambos os nomes de domínio. Mas com apenas mais quatro linhas de configuração do Apache, você melhorou a posição do seu site aos olhos dos mecanismos de pesquisa e, assim, o expôs a mais usuários na Internet.

Curioso sobre o módulo mod_rewrite mais poderoso? Confira nosso tutorial Como reescrever URLs com mod_rewrite para Apache no Ubuntu 22.04.