25/03/2024
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!
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.
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.
<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.
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.
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.
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.
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.
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.
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.
<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.
<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.
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.
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.
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.
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.
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.
<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.
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.
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.
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.
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.