Utilidades do arquivo .htaccess

Para quem trabalha com o PHP ou até mesmo outra linguagem em servidor linux ouviu falar do arquivo .htaccess, e o que será isso?
O .htaccess é um arquivo de controle do apache, cujas as funções são: redicionar URLs, bloquear diretórios com senhas, criar erros personalizados como o erro 404, escolher se o site acessa sem ou com o www  e etc. Veja aqui funções importantes deste arquivo, e aprenda a dominá-lo. O .htaccess é um arquivo sem nome, ou seja, ele possui apenas extensão. Para criar as regras abaixo, abra o bloco de notas ou similar, salve como “todos os arquivos” com o nome .htaccess.

Ocultando o index da URL

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html\ HTTP/
RewriteRule ^(([^/]+/)*)index\.html$ http://www.seusite.com.br/$1 [R=301,L]
#obs, se o seu site é feito em php, substitua os "html" pelo mesmo

Protegendo o seu site contra cópia ou uso indevido de arquivos (como scripts php, js, css, imagens)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://seusite.com.br/.*$ [NC]
#este site está liberado a usar (o seu site no caso)
RewriteCond %{HTTP_REFERER} !^http://www.seusite.com.br/.*$ [NC]
#este site está liberado a usar
RewriteCond %{HTTP_REFERER} !^http://www.google.com.br/.*$ [NC]
#liberar o google para usar as suas imagens
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|php|js|swf)$ – [F,NC]
#Neste caso, se alguém que não está na lista acima tentar usar as suas imagens direto do seu site ou usar os seus scripts, mostrará uma tela com erro e as imagens não serão mostradas.

Bloquear o arquivo .htaccess contra acesso pela URL

<Files ~ "^\.(htaccess|htpasswd)$">
  deny from all
</Files>

Bloqueando arquivos específicos contra acesso pela URL

<files seuarquivo.php>
  order allow,deny
  deny from all
</files>

Sempre colocar “www” na URL

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(seusite\.com\.br)(:80)? [NC]
RewriteRule ^(.*) http://www.seusite.com.br/$1 [R=301,L]
order deny,allow

Comprimir arquivos do site para consumir menos banda

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html

Criando páginas de erros personalizadas

ErrorDocument 400 /sua-pagina-erro-400
ErrorDocument 404 /página-de-erro-404
ErrorDocument 500 /página-para-erro-500

Alterar a página inicial (padrão) do site

DirecttoryIndex minhaoutrapagina.html

Redirecionamento 301 com htaccess

Redirect 301 /página-a-ser-movida  http://www.seusite.com.br/pagina-movida-para-ca

Bloquear listagem de diretórios

Options -Indexes

Forçar o uso de SSL

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://seu-site.com.br/$1 [R,L]

Desabilitar case sensitive

CheckSpelling On
#agora a url PAGINA.HTML é igualmente acessada por pagina.html

Restringindo o acesso por IP

Order allow,deny
allow from 192.168.0.
deny from all
# Deixa a somente a INTRANET acessar
Order deny,allow
deny from 192.168.0.25
allow from all
# Deixa todo mundo acessar, menos o IP 192.168.0.25
Order deny, allow
deny from all
#bloquear geral

Redirecionar acesso de um site para outro lugar

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?bloqueado.com.br.*$ [NC]
RewriteRule .* http://www.antispam.br [R,L]
#Se o site "bloqueado" mandar algum visitante para aqui, é redirecionado para o "antispam"

Expressões regulares

#todos os arquivos de uma página serão redirecionados para outra
RewriteEngine on
RewriteRule ^pagina-antiga/(.*) http://www.novosite.com.br/pagina-antiga/$1
#redirecionar somente os arquivos terminados em php
RewriteEngine om
RewriteRule ^pagina-antiga/(.*)\.php http://www.novosite.com.br/pagina-antiga/$1.php
#redirecionar tudo de um site para outro
RedirectMatch permanent /(.*) http://www.novosite.com/$1

Retirar extensões da URL

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
#neste caso, estou retirando apenas o HTML

Forçar o uso do Charset UTF-8 para arquivos

<FilesMatch "\.(htm|html|css|js)$">
  AddDefaultCharset UTF-8
</FilesMatch>

Cache de navegador – Definir tempo de expiração (segundos)

<ifModule mod_expires.c>   ExpiresActive On   ExpiresDefault "access plus 1 seconds"   ExpiresByType text/html "access plus 1 seconds"   ExpiresByType image/gif "access plus 2592000 seconds"   ExpiresByType image/jpeg "access plus 2592000 seconds"   ExpiresByType image/png "access plus 2592000 seconds"   ExpiresByType text/css "access plus 604800 seconds"   ExpiresByType text/javascript "access plus 216000 seconds"   ExpiresByType application/x-javascript "access plus 216000 seconds" </ifModule> 

Cache de navegador – Definir controle de cache (segundos)

<ifModule mod_headers.c>   <filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">     Header set Cache-Control "max-age=2592000, public"   </filesMatch>   <filesMatch "\\.(css)$">     Header set Cache-Control "max-age=604800, public"   </filesMatch>   <filesMatch "\\.(js)$">     Header set Cache-Control "max-age=216000, private"   </filesMatch>   <filesMatch "\\.(xml|txt)$">     Header set Cache-Control "max-age=216000, public, must-revalidate"   </filesMatch>   <filesMatch "\\.(html|htm|php)$">     Header set Cache-Control "max-age=1, private, must-revalidate"   </filesMatch> #desligar cache em arquivos php/html/htm </ifModule> 

Cache de navegador – Forçar o uso do cache, desabilitando o ETag

<ifModule mod_headers.c>   Header unset ETag </ifModule> FileETag None 

Adicionar novos mimetypes

AddType application/x-endnote-connection enz AddType application/x-endnote-filter enf AddType application/x-spss-savefile sav 

Desabilitar execução de certos Scripts

Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi

Alterar a linguagem Padrão

DefaultLanguage en-US

Alterar fuso horário padrão

SetEnv TZ America/Indianapolis

Forçar download de certos arquivos

AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4

Bloquear requisição baseado no user-agent

SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT

 

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Tumblr Posterous