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:
- 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
:
- 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 VirtualHost
s.
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 VirtualHost
s, 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):
- 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
) :
- 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/
:
- 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:
- 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:
- Se seu
VirtualHost
principal estiver contido em um arquivo (por exemplo,/etc/httpd/conf/httpd.conf
) que usa oInclude
ouIncludeOptional
para incluir o diretório que contém seu novo wwwVirtualHost
, basta mover a linhaInclude
acima doVirtualHost
principal > dentro do arquivo. - Se seu
VirtualHost
principal e seus novos arquivos wwwVirtualHost
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. Anexe01-
ao nome do arquivo wwwVirtualHost
(por exemplo,/etc/httpd/conf.d/01-www.my-website.com. conf
) e02-
ao nome do arquivo principalVirtualHost
(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:
- 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):
- 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:
OutputHTTP/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.