Utilidades do arquivo .htaccess
Quem possui um site hospedado em plataforma linux certamente já trabalhou ou pelo menos ouviu falar do Apache. 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 o com o www e etc. Neste artigo serão detalhados as principais configurações deste arquivo.
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
<IfModule mod_deflate.c> <FilesMatch "\.(js|css|jpg|png|gif|ico|php|html|htm)$"> <ifModule mod_filter.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/css text/javascript application/x-javascript text/html text/plain text/xml image/x-icon </IfModule> </FilesMatch> </IfModule>
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
#obs saiba mais sobre como criar páginas de erros personalizadas
Alterar a página inicial (padrão) do site
DirectoryIndex 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 A0 ExpiresByType image/gif A604800 ExpiresByType image/jpeg A604800 ExpiresByType image/png A604800 ExpiresByType text/css A604800 ExpiresByType text/javascript A604800 ExpiresByType application/x-javascript A604800 </ifModule>
Cache de navegador – Definir controle de cache (segundos)
<IfModule mod_headers.c> <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|xml|woff)$"> Header set Cache-Control "max-age=604800, public" Header append Vary User-Agent env=!dont-vary Header append Vary Accept-Encoding Header unset Pragma </FilesMatch> </IfModule>
Cache de navegador – Forçar o uso do cache, desabilitando o ETag
<IfModule mod_headers.c> Header unset Etag Header unset Last-Modified </IfModule>
#obs saiba mais sobre cache com htaccess
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
Eu vou postando novas utilidades conforme a necessidade. Atualizado última vez 30/08/2012
Lucas Peperaio
Estudante de Ciência da Computação, trabalho com desenvolvimento web há 5 anos e com hardware há 8. Nas horas vagas, sou entusiasta de Overclock, Casemod e Benchmarks, além é claro dos Games. Apaixonado por informática e pela vida, procuro compartilhar meus conhecimentos e assim, ajudar as pessoas. Siga-me no youtube, posto semanalmente muito material sobre Hardware, tecnologia e games em geral: Clique aqui
Excelente, simples, fácil, sem palavras…
Valeu amigo, em breve coloco aqui mais dicas sobre o .htaccess
Muito bom! Parabéns!
MarlaSaturday, September 22, 2012Well, this page is definitely bookmarked. All of these recipes are amazing! Our fave grilled cheese is with yellow American (Boar’s Head preferably) on the best wheaty chewy bread that’s available, browned up with butter. When it’s golden, take it off the heat and add sliced tomatoes, pickled jalapenos (Mtz&eteir#8217;s mild), and sliced avocado. Sub-lime!
Parabéns cara, não encontrei um post completo igual a este!
Lucas queria fazer o comando abaixo só que meu cliente esta com servidor IIS, como faço isso no web.config?
Redirect 301 /página-a-ser-movida http://www.seusite.com.br/pagina-movida-para-ca
Valeu
Perfeito mano, nada mais a dizer, o post que eu estava procurando ;) Deus te abençoe irmão
Muitos parabéns!!
Quem disse que este post é perfeito? Este post é mais que perfeito!!!
Um abração!
Amigo boa tarde. Muito boas suas dicas. Mas gostaria de saber se pode me ajudar com o seguinte.
Tenho um site com arquivos .flv mas gostaria de restringir o acesso se a pessoa digitasse simplesmente: http://www.meusite.com.br/arquivo.flv
Preciso que os arquivos ou o diretorio inteiro esteja acessivel somente após digitar usuário e senha. Meu site é em Joomla.
Pode me ajudar? Obrigado Max
Max, o problema do Joomla, WordPress, Blogspot e qualquer outra plataforma pronta de desenvolvimento, é que você fica preso em certas funções. No caso de limitar o acesso, você teria que trabalhar com sessões. O usuário logado, teria permissão de leitura no diretório. O usuário não-logado sem permissão.
Pra fazer isso é simples. Inicialmente, use a função CHMOD do PHP para tirar qualquer permissão do diretório dos arquivos FLV (CHMOD 700). Para o usuário logado, com uma sessão válida, faça o CHMOD novamente, dando permissão de leitura (CHMOD 744).
cara, valeu!!!!!!!
tava procurando isso há uma semana.
muito bom!
Opa Lucas, tudo bem? Muito bom o artigo, bem útil para gerenciar as permissões do Apache. Valeu, abraço!
Oi Lucas obrigado pelo retorno. Mas não consegui fazer essa configuração. Na verdade acho q não entendi bem. Poderias entrar em contato comigo pelo email? Gostaria de te ligar. É possível?
“Pra fazer isso é simples. Inicialmente, use a função CHMOD do PHP para tirar qualquer permissão do diretório dos arquivos FLV (CHMOD 700). Para o usuário logado, com uma sessão válida, faça o CHMOD novamente, dando permissão de leitura (CHMOD 744).”
Dá uma olhada nisso: http://php.net/manual/pt_BR/function.chmod.php
Show de bola este post, curti e posteriormente vou acessar para ver mais informações.
Amigo, muito boas as dicas..
Tenho enfrentado problemas com uns scripts poup em flash, com propagandas do YAHOO, já tentei de tudo mas não descobri…
Tem como bloquear esses malditos via .htaccess? Eles aparecem aleatoriamente e em horarios diferentes.. uso o joomla..
Não sei se é permitido, ou se ajuda.. estou colocando abaixo o codigo fonte do script que estava em uma das paginas que tinham os banners, mas agora já não tem mais…
Olá Junior, infelizmente não posso te ajudar pois não tenho conhecimentos suficientes em flash. Mas para resolver, porque vc nao tira este script do seu site?
Olá Lucas,
Esse poup aparece contra a minha vontade, deve ter alguma coisa no banco de dados do joomla ou então em algum arquivo que possibilita isso a alguem… Não aparece sempre. Caramba, é uma droga isso!
Bom dia!
Sou leigo no assunto!. Usei o page speed e ele pediu para aproveitar o cache do navegadorou coisa parecidada!. Acho que é uma das dicas postadas acima. Aonde no código fonte do blogger eu introduzo a sua dica (antes ou depois de qual tag).
Grato!
Olá amigo, recomendo que leia este artigo: http://lucaspeperaio.com/cache-de-navegador-com-htaccess
Só é possível fazer cache no Blogger se a sua hospedagem for própria, caso o seu site seja um “.blogspot” não será possível
Olá para todos!
Entre quais tags são colocados esses códigos. Sou iniciante no blogger.
Grato!
Amigo, esses códigos não são inseridos em tags pelo painel de controle, e sim pelo FTP da hospedagem. Caso você não tenha acesso FTP ao seu site, você não conseguirá sequer criar um arquivo .htaccess
Obrigado Pelo post foi de grande ajuda estava precisando da função salvar cache do navegador.
Obrigado Lucas Muito Bom Post Parabéns :)
Olá Juan, aproveite e veja este guia de cache que eu publiquei:
lucaspeperaio.com/cache-de-navegador-com-htaccess
Gostaria de saber se tem algum limite de redirecionamentos no .htaccess eu só posso fazer digamos 300 redirecionamentos? e outr questão é caso não tenha limite de redirecionamentos eu posso fazer 1000 o tempo de resposta e carregamento das paginas vai demorar
Boa tarde, estou tentando criar um redirecionamento com o .htaccess, é o seguinte quero que quando deslogar(sair) do email (webmaillogout.cgi) seja redirecionado para http://www.seusite.com/home, isso seria possivel através do htacess, meu servidor é linux ja encontrei o arquivo mais não sei o que fazer dentro do diretoria Public_html tem .htaccess.txt onde já tem alguma coisa ex: # -FrontPage-
order deny,allow deny from all allow from all
order deny,allow deny from all
AuthUserFile /home/dominio/public_html/_vti_pvt/service.pwd AuthGroupFile /home/dominio/public_html/_vti_pvt/service.grp RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://dominio.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://dominio.com$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.dominio.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.dominio.com$ [NC] RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ – [F,NC]
AuthName dominio.com IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti* Tem solução meu problema pelo .htaccess?
Amigo, o melhor a ser feito é redirecionar com PHP, pois se fizer com .htaccess, o Apache não irá executar o arquivo de logoff (webmaillogout.cgi). Basta fazer um Header(“Location: home”); no webmaillogout.cgi, após a execução do script.
Meu amigo parabéns , seu post é de longe um dos melhores sobre o assunto que eu encontrei na internet , muito bom ! CTRL + D .
Excelente !!! Muito bom o leque de opções que o htacess nos proporciona de uma forma tão bem organizada e explicada, parabéns
Artigo show … Me ajudou muito em muito primeiro site para internet !!!
Abçs!
Bom dia amigo, estou quebrando a cabeça para saber se existe um comando para alterar a frese “Index of /diretório” quando abro um diretório sem página index.html
O que quero é apenas que exiba a lista dos arquivos com a frase “Lista de arquivos da pasta tal” Tipo uma tradução da frase original para português br (Já tentei forçar via comando a linguagem pt-BR e não mudou nada) fico muito grato se souber essa :)
Tem como mudar sim, eu já fiz isso uma vez.
Vou procurar aonde eu mechi e te respondo por aqui
Veja se te ajuda:
http://antisleep.com/indices/
Olá Lucas, bom dia! Li seu artigo, legal demais! Cara, tem uma dúvida e quem sabe você poderia me ajudar. Quero fazer o seguinte em meu site, ao invés de site.com/noticia#123 ele mostrar na barra de endereço site.com/noticia/post/123. Já li muita coisa sobre .htaccess na web para fazer isso mas sem sucesso até agora. Ficaria grato por sua ajuda! Valeu.
Tente isso:
RedirectMatch 301 /noticia#(.*)$ site.com/noticia/post/$1
boa Tarde.
gostaria de saber se é possível bloquear por htaccess dessa forma:
bloquear quando digitar na url: http://exemplo.com/imagem.jpg
mas liberar se for por html:
É possível sim, pesquise por htaccess jpg hotlink no google
Brother estou desenvolvendo um sistema de login que no meu servidor apache na minha maquina as sessões funcionam perfeitamente, porem na hospedagem que contratei para colocar meu site online, a sessão funciona na primeira pagina, quando você vai para a 2a pagina a sessão simplesmente não existe, sumiu, expirou ou sei la o que, deve ser alguma configuração do PHP.ini no servidor deles penso eu.
Teria como resolver isso via .hacess?
Antes de fazer o redirecionamento header( “Location” ), coloque session_commit().
Olá..meu caro Lucas tenho problamas sério de integração do Editor de Blogs Windowns Live Writer e WordPress nao consigo aparece sempre essa mensagem quando tento postar alguma coisa no Editor “”invalid response document returned from xmlrpc server” já tentei de tudo…gostaria de saber sua opiniao ou orientaçao?
Att
Allan Marcio
Nem sabia desta integração, desculpe mas não posso te ajudar por falta de experiência
Olá Lucas, descobri esse assunto a poucos dias, e estou quebrando a cabeça para conseguir retirar a extensão .html das páginas na URL, e seu post está sendo uma luz no fim do túnel. Bem organizado e direto ao ponto mostra-se uma excelente fonte de consulta e aprendizado, porém como ainda sou leigo no assunto, estou com a seguinte dúvida: No código “Retirar extensões da URL” é preciso acrescentar mais alguma coisa, pois criei o arquivo .htaccess e mandei para o servidor mas as extensões continuam aparecendo. Desde já agradeço por sua atenção e que Deus te abençoe.
As extensões sempre continuarão aparecendo, o código que eu postei serve para habilitar o funcionamento da página mesmo sem a extensão. O que vc pode fazer é um redirecionamento “Redirect Math 301” da extensão para a página sem extensão
Amigo, bom dia. Poderia me ajudar? No meu site aparece a extensão “htm”, poderia me ajudar para retirar isso? Logo acima Eu vi a explicação, “RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html #neste caso, estou retirando apenas o HTML”
Em que linha Eu insiro o codigo, gostaria de saber como retiro o “HTM” Vai o exemplo: http://www.gamerbrasileiro.com/Diablo_3.htm
Desde já agradeço a ajuda.
Seu servidor é Windows (IIS) provavelmente este é o problema.
Lucas,
Redirecionei meu site para uma pasta: “exemplo.com.br” para “exemplo.com.br/site”.
Porém ele está redirecionando o arquivo robots.txt da raiz também.
Tem alguma forma de não redirecionar esse arquivo específico?
Obrigado
Você está redirecionando tudo, o correto seria redirecionar tudo menos o robots.
Poste como está suas regras e eu tentarei ajudá-lo
Olá Lucas,
Segue a regra:
Options +FollowSymLinks RewriteEngine On
RewriteCond %{REQUEST_URI} ^/ RewriteRule ^.*$ “http\:\/\/www\.meusite\.com\.br\/exemplo” [R=301,L]
O robots.txt está na raiz: http://www.meusite.com.br
Obrigado
Carol, it really makes me feel old, the amount of time I spent thinking and discussing weather these days. But I can't help it if it's really strange and influences my perfume wearing habits.I hope it won't be a difficult turn for you next week – it gets hard on people when the tetrmraeupes change so suddenly (my boyfriend gets terrible headaches).
Excelente artigo, parabéns!
cara estou apanhando para remover a extensão .html do meu site, no entanto usei o código para remover o index e funcionou de boa, mas quando usei o código para remover o .html não vai e o meu site fica assim: http://www.meusite.com.br/contato.html como resolvo isso?
Dr., belo post e site, só acho que faltou uma questão do .htaccess, se tiver no post passou despercebido, impedir o acesso direto aos scripts http://office.site.com.br/login.php, depois que foi usada a reescrita da URL.
Como o desse site:
http://escritorio.vamopracima.com.br/login
Não funcionando assim
http://escritorio.vamopracima.com.br/login.php –> File not found.
Muito bom o material
to com um problema, o meu site tera videos postados e tenho que proteger o diretorio de acesso externo e se possivel encryptar o URL do video e não tenho ideia de como fazer isso?
Olá gostei da explicação queria saber se tem como fazer com que só o usuario logado podesse baixar o arquivo e que esteja ativo no meu sistema ou seja que tenha pago a taxa via pagseguro. Como posso acessar informacoes assim com htaccess?