Aprenda tudo sobre .htaccess com 20 Exemplos Práticos

Tutorial prático para você dominar todo o poder do arquivo .htaccess

25/03/2024

Aprenda tudo sobre .htaccess com 20 Exemplos Práticos

Aprenda tudo sobre .htaccess com 20 Exemplos Práticos

Introdução

O arquivo .htaccess é uma ferramenta poderosa que, quando dominada, pode significativamente melhorar a segurança e a performance do seu site. Este tutorial foi criado para desmistificar o .htaccess, tornando-o acessível tanto para desenvolvedores iniciantes quanto para profissionais que buscam aprimorar suas habilidades.

Desde configurações básicas de segurança até técnicas avançadas de otimização, você aprenderá passo a passo como utilizar o .htaccess para controlar o acesso ao site, personalizar páginas de erro, otimizar o cache do navegador, e muito mais. Prepare-se para explorar todo o potencial que o .htaccess tem a oferecer!

Controle de Acesso

AuthType Basic
AuthName "Área Restrita"
AuthUserFile /caminho/para/.htpasswd
Require valid-user

Este código protege uma pasta com autenticação, exigindo nome de usuário e senha. As credenciais de acesso devem ser armazenadas no arquivo .htpasswd

Se o seu site estiver hospedado na MCO2, você tem a vantagem de poder configurar essa proteção diretamente pelo painel de controle da hospedagem, facilitando o processo de segurança sem a necessidade de editar manualmente os arquivos .htaccess.

Personalização de Páginas de Erro

ErrorDocument 404 /pagina-de-erro-404.html

Define uma página personalizada para o erro 404 (página não encontrada), permitindo uma melhor experiência do usuário ao navegar no seu site, pois você pode fornecer informações úteis ou um caminho de volta à navegação principal.

Diretivas de Cache

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>

Configura o cache do navegador para arquivos estáticos, definindo o tempo em que o arquivo deve ser armazenado em cache pelo navegador. O parâmetro numérico "2592000" representa o número de segundos que o navegador deve armazenar o arquivo em cache, que neste caso é igual a 30 dias. Isso ajuda a melhorar a velocidade de carregamento do site para visitantes recorrentes.

Redirecionamentos Avançados

Redirect 301 /pagina-antiga.html /pagina-nova.html

Redireciona permanentemente uma página antiga para uma nova URL. Esse tipo de redirecionamento é especialmente útil em situações como a reestruturação de um site ou a mudança permanente de uma URL de página, garantindo que os usuários e os motores de busca sejam direcionados para o conteúdo correto sem impactar negativamente na otimização para buscadores.

Reescrita de URL

RewriteEngine On
RewriteRule ^produto/([0-9]+)$ /pagina-produto.php?id=$1 [L,QSA]

Reescreve URLs amigáveis para scripts dinâmicos, melhorando a experiência do usuário e a otimização do site para os buscadores. Por exemplo, uma URL como "seudominio.com/produto/123" seria internamente tratada pelo servidor como "seudominio.com/pagina-produto.php?id=123", permitindo URLs mais legíveis sem alterar a estrutura física do site.

Proteção contra Hotlinking

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?seudominio.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

Previne hotlinking de imagens, garantindo que as imagens do seu site só possam ser visualizadas se a requisição vier diretamente do seu domínio. Isso evita que outros sites consumam sua largura de banda ao incorporar suas imagens, protegendo seus recursos.

Forçar HTTPS

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Este trecho redireciona todas as requisições feitas em HTTP para HTTPS, promovendo uma conexão segura para todos os visitantes do seu site. A condição RewriteCond %{SERVER_PORT} 80 verifica se a requisição está sendo feita através da porta 80, padrão para HTTP, e, em caso afirmativo, a regra de reescrita redireciona a requisição para uma conexão segura HTTPS.

Habilitar Características de Segurança HTTP Strict Transport Security (HSTS)

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Esta configuração instrui o navegador a usar apenas conexões HTTPS para o site durante o período especificado pelo 'max-age' (aqui definido para um ano). A flag 'includeSubDomains' garante que todas as subdomínios também sejam acessados exclusivamente via HTTPS.

Definir Arquivo Principal de Diretório

DirectoryIndex inicio.html

Define "inicio.html" como o arquivo padrão a ser servido quando um diretório é acessado, permitindo personalização de acordo com as necessidades do site ou sistema.

Compressão GZIP

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</IfModule>

Ativa a compressão GZIP para tipos específicos de conteúdo, reduzindo o tamanho dos arquivos transmitidos e consequentemente o tempo de carregamento do site. Esta técnica é vital para melhorar a performance do site, especialmente em conexões lentas.

Restringir Métodos HTTP

<LimitExcept GET POST>
Deny from all
</LimitExcept>

Esta configuração permite apenas requisições GET e POST no servidor, restringindo outros métodos HTTP como PUT e DELETE, que podem ser usados em ataques de injeção de conteúdo ou na modificação indesejada de recursos. Limitar os métodos HTTP disponíveis ajuda a proteger o site contra vulnerabilidades específicas, garantindo que apenas as operações esperadas sejam permitidas.

Configurar Headers de Segurança

Header set Content-Security-Policy "default-src 'self'"

Define uma política de segurança de conteúdo (CSP) que especifica quais fontes de conteúdo são confiáveis, neste caso, apenas o próprio domínio ('self'). Isso ajuda a prevenir ataques como Cross-Site Scripting (XSS) e data injection, garantindo que o navegador carregue e execute somente recursos do próprio site, bloqueando conteúdos injetados de fontes externas.

Implementar CSP (Content Security Policy)

Header set Content-Security-Policy "script-src 'self'; object-src 'none'"

Especifica mais detalhadamente quais scripts podem ser executados na página e impede a execução de plugins (como Flash e Java), aumentando a segurança contra ataques de injeção de código, como Cross-Site Scripting (XSS). Ao definir 'script-src 'self'', apenas scripts do mesmo domínio são permitidos, enquanto 'object-src 'none'' bloqueia todos os objetos, ajudando a prevenir a exploração de vulnerabilidades por meio de conteúdo incorporado.

Redirecionar para www

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Redireciona todas as requisições sem o prefixo "www" para a versão com "www" do domínio.

Redirecionar www para não-www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]

Redireciona todas as requisições de um domínio www para a versão não-www.

Configuração do Charset

AddDefaultCharset UTF-8

Define o charset padrão como UTF-8 para todos os tipos de conteúdo, garantindo que textos e caracteres sejam corretamente exibidos e interpretados pelo navegador, evitando problemas de codificação que podem afetar a visualização do site ou a funcionalidade de scripts.

Bloquear Acesso a Arquivos Sensíveis

<FilesMatch "\.(ini|config|env|sql|bak|gz|zip|tgz)$">
Deny from all
</FilesMatch>

Esta diretiva impede o acesso direto a arquivos sensíveis que possam conter informações importantes ou de configuração do servidor, como bancos de dados ou arquivos de backup. Bloquear esses tipos de arquivos aumenta a segurança do site, evitando que informações críticas sejam expostas acidentalmente a usuários externos ou mal-intencionados.

Ativar CORS (Cross-Origin Resource Sharing)

Header set Access-Control-Allow-Origin "*"

Permite que recursos do seu site sejam acessados por qualquer outro site, configurando o compartilhamento de recursos entre origens diferentes (CORS). Esta diretiva é útil para APIs ou conteúdos que devem ser acessíveis por múltiplos domínios. É importante usar essa configuração com cautela, pois a permissão ampla ('*') pode expor recursos a possíveis abusos.

Prevenir o Embedding de Páginas (X-Frame-Options)

Header always append X-Frame-Options DENY

Previne que a página seja embutida em iframes de outros domínios, protegendo contra ataques de clickjacking, onde um atacante pode enganar um usuário para clicar em algo diferente do que percebe, potencialmente revelando informações confidenciais ou assumindo controle sobre sua interação com o site.

Bloquear Acesso de Bots Específicos

SetEnvIfNoCase User-Agent "MJ12Bot" BLOCK_BAD_BOTS
SetEnvIfNoCase User-Agent "MauiBot" BLOCK_BAD_BOTS
Deny from env=BLOCK_BAD_BOTS

Esta configuração bloqueia o acesso dos bots MJ12Bot e MauiBot, ambos conhecidos por atividades maliciosas e indesejadas. Usando a diretiva SetEnvIfNoCase, identifica-se e bloqueia solicitações desses User-Agents específicos, melhorando a segurança do site e protegendo recursos.

Conclusão

A implementação correta do arquivo .htaccess pode significativamente melhorar a segurança e o desempenho do seu site.

Antes de qualquer alteração, é prudente fazer um backup do arquivo .htaccess. Isso garante que, diante de qualquer eventualidade, você possa restaurar a configuração anterior e manter o site funcionando sem interrupções.

Este artigo nas redes sociais: Facebook, Twitter/X, LinkedIn, Telegram, Pinterest, Tumblr, Flipboard, Mastodon

Domínios hospedados
Clientes satisfeitos