DevSecOpsARTIGO

Htaccess direto ao ponto

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!

IT Manager no Pleimo, coke addic, nerd, perfeccionista e apaixonado pelo que faz.

Ver perfil