Nesta terceira parte dos truques e dicas de .htaccess, vou abordar algumas funções também bastante úteis, e até mesmo pouco divulgadas.
Geralmente os servidores configuram com CGI ou shtml as páginas de erro. Eu particularmente acredito que com .htaccess fica bem mais fácil gerenciá-las (até mesmo porque, com um script de geração de arquivos .htaccess confeccionado em PHP, você pode trocar sempre que quiser suas páginas de erro.)
PHP
ErrorDocument 400 /errors/badrequest.php
ErrorDocument 401 /errors/authrequerida.php
ErrorDocument 403 /errors/proibido.php
ErrorDocument 404 /errors/naoencontrado.php
ErrorDocument 500 /errors/erroservidor.php
Assim, você pode gerenciar melhor suas páginas de erro, e mesmo que precise alterar na mão, fica muito mais fácil, pois va estar tudo dentro um mesmo arquivo, concorda? Atente-se para o fato de que estas diretivas de páginas de erro, devem estar na raíz do site (pasta public_html).
Agora um item que acho importante.
Bloquear aqueles programinhas que baixam todo o site, os famosos ripadores ou "navegadores offline". Existem sites e programas que fazem isso, e alguns deles podem ser bloqueados também por meio do arquivo .htaccess (na raíz do site).
PHP
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]
Estes são apenas alguns dos softwares de baixar conteúdo, que você pode bloquear. Lembrando que pra isso ficar atualizado, você precisa sempre se informar sobre novos produtos com esta finalidade, para adicionar a esta lista.
Há vários desenvolvedores, sofrendo com cabeçalhos no php, para forçar o download de alguma aplicação. As vezes não queremos isso no script, por n motivos. As vezes você está num ambiente de teste ou então no seu proprio ambiente e não precisa nem quer configurar cabeçalhos no script php. Com a função AddType, você pode forçar que em determinado conteúdo, abra a tela de download ao invés de abrir no navegador. Muito, muito útil!
PHP
AddType application/octet-stream .avi
AddType application/octet-stream .mpg
Assim, você pode linkar o arquivo .avi por exemplo, para que o usuário baixe, sem correr o risco de que o Media Player dele abra pra executar o arquivo! Simples não?
Controle de cache
O pessoal que gera conteúdo dinâmico, se preocupa muito com cache, seja de arquivos, flash, imagens, etc. Existem regras para forçar o esvaziamento do cache com determinado tempo, ou então manter caso o arquivo não seja atualizado frequentemente. Ambas as regras são úteis. A última é mais útil pra quem tem galerias de fotos que não serão atualizadas frequentemente, como no caso de albuns, ou então imagens estáticas de sites. Isso economiza um pouco de banda, visto que uma vez acessado, poderá ser guardado no cache durante o tempo que você determinar.
PHP
# Uma semana de cache nos arquivos mencionados
<FilesMatch "\.(js|css|pdf|swf)$">
Header set Cache-Control
"max-age=604800" </FilesMatch>
# 10 minutos de cache nestes arquivos
<FilesMatch "\.(html|htm|txt)$">
Header set Cache-Control
"max-age=600" </FilesMatch>
# não gravar cache nestes arquivos
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
</FilesMatch>
Note que você pode ter vários tipos de cache para cada tipo de arquivo. Assim, você pode balancear o que deseja não guardar cache, caso seja conteúdo dinâmico que precisa estar sempre atualizado, e o que quer guardar para economizar desempenho do servidor. E veja que caso você esteja em uma empresa de hospedagem, você nem precisa incomodá-los com estas questões! Muda ou não muda a sua vida? ;)
Na quarta parte desta série, vou abordar mais algumas funções super úteis do .htaccess. Creio que nesta altura, você deve querer saber o que mais ele pode fazer pra facilitar a sua vida!