DevSecOps

15 abr, 2011

Htaccess direto ao ponto

Publicidade

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!