Ir para o conteúdo principal

Com ou sem www

·427 palavras·3 minutos
Desenvolvimento Web Nginx Apache IIS HTTPS htaccess Web Server
Vitor Pinho
Autor
Vitor Pinho
O informático de casa

Por acaso já te aconteceu, quando escreves um domínio (muitos websites de bancos cá têm esse problema) sem o www no início, a página falha? Porquê? Falta uma regra de reecaminhamento para o endereço correcto, o que pode acabar com muitos problemas de acesso a um website. É algo muito simples de fazer (mas deixe para um administrador de sistemas).

Mas primeiro…

Porquê usar www?
#

Alguns websites excluem o uso do www, preferindo apenas o nome do domínio (ex: meuwebsite.com). Embora não está errado, mais tarde isto pode causar problemas.

Se por alguma razão, o registo do website for ou alterar para CNAME, os registos MX deixarão de funcionar correctamente, pois entram em conflito. Dai a adopção do subdomínio www como porta de entrada para um website. Dessa maneira, não afectará os restantes registos (excepto se também forem criados registos no sub-domino www que causem conflito, pelo que não é recomendável**).**

Como automatizar
#

Existem plataformas de gestão web que facilitam esse trabalho, mas o que vamos exemplificar aqui é feito pelo ficheiro de configuração. Primeiro, é importante ter-se um registo A no domínio a apontar para o servidor e um registo A ou CNAME (dependendo da configuração) com o registo www apontando igualmente para o mesmo sítio.

O exemplo abaixo não só reencaminhará o meuwebiste.comwww.meuwebsite.com , como também reencaminhará para uma ligação segura http://meuwebsite.comhttps://www.meuwebsite.com.

Apache (.htaccess)
#

# Forçar https
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on

RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
# RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[\w-]+$
# RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# </IfModule>

# Forçar 'www.'
<IfModule mod_rewrite.c>
 RewriteEngine On

 RewriteCond %{HTTPS} =on
 RewriteRule ^ - [E=PROTO:https]
 RewriteCond %{HTTPS} !=on
 RewriteRule ^ - [E=PROTO:http]

 RewriteCond %{HTTP_HOST} !^www\. [NC]
 RewriteCond %{SERVER_ADDR} !=127.0.0.1
 RewriteCond %{SERVER_ADDR} !=::1
 RewriteRule ^ %{ENV:PROTO}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

IIS (web.config)
#

<rule name="https" stopProcessing="true">
 <match url=".*$" />
  <conditions logicalGrouping="MatchAll">
   <add input="{HTTPS}" pattern="^OFF$" />
   <add input="{HTTP_HOST}" pattern="dev" negate="true" />
  </conditions>
  <action type="Redirect" url="https://www.meuwebiste.com{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
</rule>

<rule name="www" stopProcessing="true">
 <match url=".*$" />
  <conditions logicalGrouping="MatchAll">
   <add input="{HTTP_HOST}" pattern="www" negate="true" />
   <add input="{HTTP_HOST}" pattern="dev" negate="true" />
  </conditions>
  <action type="Redirect" url="https://www.meuwebiste.com{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
</rule>

Nginx (nginx.conf)
#

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name www.meuwebsite.com;

    ...
}

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name meuwebsite.com;

    return 301 https://www.$server_name$request_uri;
}
Nota: Para Nginx e IIS, não esqueças de substituir meuwebiste.com pelo domínio do teu website. Como não tenho experiência em Nginx, apenas publico que me foi repassado. Em caso de problemas, não esqueças de comentar abaixo.