Os arquivos .htaccess oferecem um meio de fazer mudanças nas
configurações do diretório. Um arquivo contendo uma ou mais diretrizes
de configurações é colocado em um diretório em particular. Enquanto isso as
diretrizes se aplicam para aquele diretório e todos os seu subdiretórios
subseqüentes. No geral, se usa arquivos .htaccess quando você não tem
acesso ao arquivo de configuração principal do servidor.
Confira o modelo abaixo que apresenta uma coleção de dicas para otimização de
performance, de fácil entendimento e manipulação. Este modelo não prescreve nenhuma
filosofia, apenas auxilia o desenvolvimento.
# Fontes de Kroc Camen: camendesign.com/.htaccess
# Adaptação de Leonardo Moreira: leonardomoreira.com.br/htaccess
RewriteEngine on
# Definindo o idioma. Recursos como x-webkit-speech (http://migre.me/46mS9) usam o idioma padrão.
DefaultLanguage pt-BR
# Se você usa uma index page diferente do padrão do servidor, defina abaixo:
DirectoryIndex main.html
# Definindo o fuso horário do servidor
SetEnv TZ America/Sao Paulo
# Remove assinatura do servidor
ServerSignature Off
# Exibe 404 para uma reescrita se uma pasta de mesmo nome não existir
Options -MultiViews
# Impede de navegar em pastas sem um documento padrão (index)
Options -Indexes
# Para habilitar a navegação no diretório use:
# Options +Indexes
# Página 404
ErrorDocument 404 /404.html
# Previnindo acesso
<filesmatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$"="">
Order Allow,Deny
Deny from all
</filesmatch>
#
# Forçando a última versão do IE, em vários casos quando ele poderia voltar ao modo IE7
# Use ChromeFrame se estiver instalado
#
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
</IfModule>
</IfModule>
#
# É preciso informar os proxies alterações de conteúdo baseado em UA
#
<IfModule mod_headers.c>
Header append Vary User-Agent
</IfModule>
#
# Permite o acesso de todos os domínios para as web fontes.
#
<FilesMatch ".(ttf|otf|eot|woff|font.css)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
# Forçando a codificação
AddDefaultCharset utf-8
AddCharset utf-8 .html .css .js .xml .json .rss
#
# Filetypes adicionais
#
# video
AddType video/ogg ogg ogv
AddType video/mp4 mp4
AddType video/webm webm
# Servindo SVG do jeito certo. Necessário para webfonts SVG no iPad
# twitter.com/FontSquirrel/status/14855840545
AddType image/svg+xml svg svgz
AddEncoding gzip svgz
# webfonts
AddType application/vnd.ms-fontobject eot
AddType font/truetype ttf
AddType font/opentype otf
AddType font/woff woff
# variados
AddType image/vnd.microsoft.icon ico
AddType image/webp webp
AddType text/cache-manifest manifest
AddType text/x-component htc
AddType application/x-chrome-extension crx
AddType application/rss+xml .rss
AddType text/remarkable .rem
AddType text/plain .do # “to.do” files
# Compressão gzip
<IfModule mod_deflate.c>
# html, txt, css, js, json, xml, htc:
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
# webfonts e svg:
<FilesMatch ".(ttf|otf|eot|svg)$" >
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
#
# Fazendo cache de recursos com Expires HTTP
# Lembre-se de assumir controle de versão com cache-busting
#
# Ex. <script src="master.js?20100608">
#
# Mais detalhes em: stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
#
<IfModule mod_expires.c>
Header set Cache-Control "public"
ExpiresActive on
ExpiresDefault "access plus 1 month"
ExpiresByType text/cache-manifest "access plus 0 seconds"
ExpiresByType text/html "access plus 0 seconds"
# Dados
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
# Feed RSS
ExpiresByType application/rss+xml "access plus 1 hour"
# Favicon (não pode ser renomeado)
ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
# Imagens, vídeo, audio;
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# Webfonts
ExpiresByType font/truetype "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType font/woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
# CSS / jScript
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
</IfModule>
#
# Estamos usando HTTP Expires, não precisamos do ETag, desativar!
#
FileETag None
# Permite que cookies sejam enviados por iframes (somente IE). Descomentar para usar.
#
# <IfModule mod_headers.c>
# <Location />
# Header set P3P "policyref="/w3c/p3p.xml", CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT""
# </Location>
# </IfModule>
# no-www, retira o "www" e redireciona.
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>
Espero que o modelo tenha facilitado o entendimento para manipulação e desenvolvimento contínuo do .htaccess. Conto com o feedback de vocês nos comentários. Até o próximo artigo!