Como melhorar o seu site com ficheiro htaccess

Como o htaccess pode aumentar a segurança do seu site, melhorar a velocidade e o SEO – otimização para motor de busca – e até definir como vai ser a utilização dos urls.

 

htaccess-melhorar-site.jpg

Se já implementou um site web num servidor Apache, certamente já viu um ficheiro chamado htaccess na raiz do servidor. Se não sabia o que fazer com ele e o deixou intocado, pode não só estar a desperdiçar potencial do seu site, mas também a deixar abertas vulnerabilidades que podem comprometer a segurança do site.

Aprender a usar o htaccess é pois fundamental para quem faz a construção de um web site, seja web developer ou web designer, e também para o digital marketeer.

Atenção! Estes códigos são códigos que uso nos servidores de alojamento do meu site e dos sites dos meus clientes. Poderão não funcionar no SEU alojamento, pelo que aconselho SEMPRE a fazer backup do htaccess que estiver lá antes. Eu próprio não sei descrever ao certo o que eles fazem exactamente, só sei que funcionam! cool

Experimente passo a passo e caso aconteça algum erro ou asneira, reponha o backup do ficheiro. Para mexer no htaccess deverá usar um cliente de FTP, veja aqui a minha recomendação.

Como melhorar a segurança com o htacess

Foi este artigo do Daniel Gomes sobre segurança de sites que deu o mote para este artigo de blog. Afinal...

Nada como partilhar conhecimento para gerar conhecimento.

Em suma: através do htaccess pode aumentar exponencialmente a segurança do seu site. Como aferir a situação atual? Verifique o seu site no Security Headers e veja que nota merece.

A partir daqui experimente adicionar o seguinte código:

# CODIGO PARA AUMENTO DE SEGURANCA #
<IfModule mod_headers.c>
# Unset Server Signature header
ServerSignature Off
# Unset Server Technology header
Header always unset X-Powered-By
Header set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header set Referrer-Policy "no-referrer-when-downgrade"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains”
Header always set Content-Security-Policy "upgrade-insecure-requests"
</IfModule>
<IfModule mod_reqtimeout.c>
   RequestReadTimeout header=20-40,MinRate=500 body=20-40,MinRate=500
</IfModule>
# FIM CODIGO PARA AUMENTO DE SEGURANCA #

E já que falamos em segurança, como deve ter um certificado SSL no servidor (veja aqui o meu artigo sobre os diferentes certificados SSL), quererá dirigir todo o tráfego para o site com https. Nada mais simples:

# REDIRECCIONAR PARA HTTPS #
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.oseusite.com/$1 [R,L]
# FIM DE REDIRECCIONAR PARA HTTPS #

Como definir com www ou sem www e com ou sem https, com o htaccess

Pretende definir o site com ou sem www? Com ou sem https? Espero que com https, devido aos benefícios de SEO e de segurança.

De qualquer forma, convém ter um URL uniformizado: sempre que entrarem no seu site os utilizadores vão ver o mesmo URL, mesmo que entrem com um URL "parecido". Tenho clientes que considerei que ficam mais fáceis de memorizar com www e outros sem.

Como definir que só queremos o site com www no htaccess? 

# FORÇAR WWW #
RewriteEngine on
RewriteCond %{HTTP_HOST} ^oseusite.com [NC]
RewriteRule ^(.*)$ http://www.oseusite.com/$1 [L,R=301,NC]
# FIM FORÇAR WWW #

...e se quisermos sem o www:

# FORÇAR SEM WWW
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.oseusite\.com [NC]
RewriteRule ^(.*)$ http://oseusite.com/$1 [L,R=301]
# FIM FORÇAR SEM WWW

Repare que podemos ter aqui as duas coisas: dirigir para com ou sem www e para o https. É só questão de alterar um pouco o código:

# FORÇAR SEM WWW E COM HTTPS
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.oseusite\.com [NC]
RewriteRule ^(.*)$ https://oseusite.com/$1 [L,R=301]
# FIM FORÇAR SEM WWW E COM HTTPS

Como aumentar a rapidez do site com htaccess

Ao definirmos que certos tipos de ficheiros “expiram”, estamos a atribuir uma data de validade às requisições HTTP feitas pelo browser. Desta forma o browser pode usar de imediato a sua memória cache, caso exista, reduzindo o tempo de carregamento das imagens ou outros ficheiros.

Experimente adicionar o seguinte código, que determina que os ficheiros serão válidos durante um mês após o primeiro acesso:

# TEMPO CACHE EXPIRADA #
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
# FIM TEMPO CACHE EXPIRADA #

Como redireccionar páginas com o httacess

Alterou uma determinada página para outra nova? Não quer perder tráfego para uma página de erro 404? Faça um redireccionamento logo no htaccess.

Exemplo eu tinha um site com centenas de páginas html, algumas deles com um excelente ranking orgânico. No site em PHP queria preservar esse ranking, até porque várias dessas páginas tinham backlinks. Mesmo com uma boa página de erro 404 (“Página Não Encontrada”) ou redireccionamento no Concrete 5, é preferível ser logo o servidor a reencaminhar o utilizador à página correcta, sem sequer notar.

Altere o código à sua maneira e coloque no htacces. Pode reencaminhar directo para uma página (primeira linha de exemplo) ou para uma pasta (segunda linha):

Redirect 301 /paginaantiga.html http://www.oseusite.com/novapagina.html

...ou para uma pasta (segunda linha):

Redirect 301 /paginaantiga2.html http:// www.oseusite.com /pasta/

 

Update: para um gui completíssimo, ver o Guide to htaccess by Daniel Gomes.

Espero que goste e já sabe que pode sempre contribuir para aumentar as muitas coisas que este pequeno ficheiro htaccess pode fazer pelo seu site. Agora, é hora de partilhar: