Desvendando o arquivo .htaccess

14 de novembro de 2009 por Marcelo Alves

Qual webdesigner que já não se esbarrou no famoso arquivo .htaccess e se perguntou para que serve esse arquivo? Na Dúvida, melhor não mexer. Para que você não passe por isso novamente, vamos desvendar todos os segredos desse arquivo.

Antes de continuarmos, vamos definir o que é o arquivo .htaccess.
O .htaccess é um arquivo que fica no servidor web e serve para configurar o tipo de acesso a esse servidor. Com ele, pode-se controlar diversos parâmetros como: acesso restrito (com ou sem uso de senha), páginas de erro padrão, página padrão de acesso ao site, acesso com e sem o “www”, redirecionar diretivas, entre outros. O uso correto do arquivo .htaccess provê grande auxilio no SEO do site.

Nota: Ao colocar um arquivo .htaccess na pasta raiz de um site, ele atuará sobre todas as pastas deste. Mas, um arquivo .htaccess uma subpasta anula a ação do anterior passando a agir sobre essa pasta e suas subpastas.

Exemplo de um arquivo .htaccess comentado:

// ——- Autenticação com senha ativado ———–//
deny from all
AuthUserFile /site/.htpasswd
AuthGroupFile /dev/null
AuthName “Please enter your ID and password”
AuthType Basic
require valid-user
//——- páginas de erro padrão ———–//
ErrorDocument 400 erro400.html
ErrorDocument 401 erro401.html
… xxx erroXXX.html
ErrorDocument 504 erro504.html
ErrorDocument 505 erro505.html
RewriteEngine on
//———– Evitando Conteúdo duplicado ———–//
RewriteCond %{HTTP_HOST} ^(mundoseo\.com\.br)(:80)? [NC]
RewriteRule ^(.*) http://www.mundoseo.com.br/$1 [R=301,L]
//———– Página Padrão ———–//
DirectoryIndex páginadefault.html
//———– Redirecionamento Permanente ———–//
Redirect permanent www.movapermanentedaqui.com www.movidopermanenteparaca.com
//———– Redirecionamento Temporário ———–//
Redirect temp www.movatemporariodaqui.com www.movidoparacatemporario.com
order deny,allow
//——— Páginas permitidas ————-//
allow from www.endereçopermitido.com.br
//——— Páginas Bloqueadas ————-//
deny from www.endereçonegado.com.br

Vamos às requisições do código:

Nota: Mantenha o seu arquivo .htaccess sempre organizado e não coloque instruções desnecessárias para não pesar o arquivo, pois o servidor o processa sempre que há uma requisição.

Comentários: para inserir um comentário utilize um # antes do conteúdo da linha.

Não listar o conteúdo de um diretório:

Quando se tenta acessar um diretório, em ausência de um arquivo de índice, o Apache mostra por defaut o conteúdo do diretório. Se quisermos impedir a visualização desse conteúdo bastaria criar um arquivo de índice, por exemplo index.html, mas existe uma solução mais elegante mediante a diretiva Options. Basta inserir o comando:

Options -Indexes

Página padrão:

Também poderíamos utilizar a diretiva DirectoryIndex, que especifica que arquivos atuam como índice por defeito, e que arquivo mostrar no caso de que estes não se encontrem. Por exemplo a linha:

DirectoryIndex index.php index.html index.htm /proibido.php

Isto indicaria ao servidor que deve buscar os arquivos index.php, index.html ou index.htm, nessa ordem, e no caso de não encontrar nenhum deles, carregar o arquivo proibido.php.

Página de erro (exemplo erro 404):

Primeiramente, crie o layout da página de erro. Depois, inclua o código.
ErrorDocument 404 http://www.meusite.com/404.html

Você pode especificar qualquer arquivo que desejar para a personalização do erro e o que deve ser feito para implementá-lo é somente adicionar uma linha de comando pra cada erro ao .htaccess com o seguinte formato:

ErrorDocument 404 erro404.html ou ErrorDocument 404 arq_inexist.htm
ErrorDocument 403 erro403.html ou ErrorDocument 403 proibido.htm
ErrorDocument 500 erro500.php ou ErrorDocument 500 erro_interno.asp

Escondendo a extensão da linguagem de script:Pode-se aumentar a segurança mudando a extensão dos scripts para que os visitantes desconheçam que linguagem está utilizando.# Make PHP code look like unknown typesAddType application/x-httpd-php .cool, desta forma, os arquivos .cool serão tratados como se fossem arquivos PHP. Deve-se renomear os arquivos PHP para a nova extensão.

Bloquear acesso ao site por IP:

Sempre existem os malas que ficam vasculhando o seu site a procura de falhas pra entrar, causar problemas e pichar. É só bloqueá-lo adicionando uma linha de comando com o seguinte formato:

order allow,deny
deny from 012.34.5.6
deny from 012.34.5.
allow from all

A primeira linha bloqueia e não permite que o IP de endereço 012.345.5.6 acesse o site. A segunda linha bloqueia o acesso para o bloco de 012.34.5.1 até 012.34.5.255. A terceira linha permite a todos os outros acessarem o site.

Se você quer somente visitantes do Brasil você poderia configurá-lo assim:

order allow,deny
deny from all
allow from 200.
alow from 201.

Quer bloquear os usuários de um determinado provedor/servidor e não sabe o range de IP, sem problemas:

order allow,deny
deny from .veloxzone.com.br
allow from all

Redirecionamento:

As formas de redirecionar páginas são diversas : javascript, PHP, HTML(http-equiv),etc. Não é diferente com o .htaccess, e bem simples também:

Redirect /dirantigo/pagina_velha.html http://www.seusite.com/dirnovo/pagina_nova.html

As 3 partes que compõem esta diretiva são separadas por espaço e note que o comando é composto de 3 partes que precisam estar numa mesma linha: a primeira é o comando Redirect seguido da localização do arquivo/diretório que você quer redirecionar, relativa ao diretório principal do seu site, e a terceira é o endereço completo do novo arquivo para o qual deve ser redirecionado. Há ainda a possibilidade de se redirecionar todo um diretório :

Redirect /dirantigo/ http://www.seusite.com/dirnovo/

As aplicações são várias, desde repor a informação de um arquivo que você mudou de diretório ou/e de nome até ao redirecionamento de um usuário que requisitou a visualização de um diretório não permitido, por exemplo o de imagens.

Prevenindo-se contra “hot-linking”:

“Hot Linking” são links que apontam diretamente pra arquivos não HTML e roubam/decrescem a sua banda contratada. E também possível evitar isso com o .htaccess, mas antes verifique com o seu servidor se ele permite mod-rewrite. Segue abaixo o código:

RewriteCond %{HTTP_REFERER} !^http://seusite.com.br/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.seusite.com.br/.*$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ – [F,NC]

O código acima apresenta um link quebrado para a imagem, mas se desejar mostrar sua logo ou coisa parecida, use:

RewriteCond %{HTTP_REFERER} !^http://seusite.com.br/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.seusite.com.br/.*$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ http://www.seusite.com/sua_logo.gif [R,L]

Impedindo a listagem de diretórios:

Existe sempre aquela situação de ter um diretório cheio de arquivos que não desejamos que sejam listados. Existem duas possibilidades pra se fazer isso: a primeira é criar um arquivo index.html vazio e colocar no diretório e a outra com o .htaccess: IndexIgnore *Se este comando estiver no arquivo .htaccess do diretório principal, a listagem de todos os diretórios estarão desabilitadas. Mas você pode também especificar o tipo de arquivo que você não quer que seja listado:

IndexIgnore *.wmv *.jpg *.gif *.swf

Proibe a visualização do arquivo .htaccess:

order allow,deny
deny from all

Com estas informações você já pode configurar o seu arquivo .htaccess. Qualquer dúvida deixe um comentário. Até a próxima

Compartilhe:
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Twitter
  • Yahoo! Buzz
  • dihitt
  • Ueba
  • Orkut

Leia também

4 Comentários to “Desvendando o arquivo .htaccess”

  1. Dermeval Junior disse:

    O que eu preciso, já vasculhei nos foruns e não encontrei uma resposta.

    eu preciso proibir o acesso direto a um arquivo dentro de uma pasta, mas que possa ser acessado através de links no próprio site.

    Tipo, o usuário sabe o caminho e nome do arquivo, então chama direto do navegador:

    http://www.meu_site.com/pasta_de_imagens/imagem.gif

    preciso que a exibição dessa imagem seja bloqueada, mas se esse endereço estiver em um link no meu site, aí chame normalmente.

  2. Marcelo Alves disse:

    Ola Dermeval,

    configure o acesso com senha à pasta em questão.
    e esconda a pasta dos mecanismos de busca configurando o arquivo robots.txt, veja o artigo:
    http://www.marcelo-alves.com/72dpi/?p=129

  3. Eric disse:

    Meu caro,

    Primeiro parabéns pelo blog e explicações, serão muito úteis. Tenho um site de comercialização de imóveis online onde nesse e qualquer outro ramo a inveja é fogo… Enfim, diversas vezes eu percebi que o .htaccess estava completamente mudado, onde, as imagens do meu site estavam, quebradas e os links do site direcionava para outro com virus. Eu sempre tinha o cuidado de colocar tudo certinho, porém quero saber se tem como eu bloquear que terceiros e maldosos editem o arquivo .htaccess do meu site??

    Fico no aguardo.

    Att

    Eric P.

  4. Marcelo Alves disse:

    Boa noite Éric,

    primeiramente, obrigado pela visita e pelos comentários.

    Respondendo a sua questão é o seguinte:

    Não posso apontar o problema, nem a solução, pois teria que fazer uma análise mais detalhada no seu site e no seu servidor, portanto levantarei algumas hipóteses mais prováveis para o problema e as possíveis soluções.

    1- O seu problema mais sério não é com o arquivo .htaccess e sim com a segurança do seu servidor. Entre com contato com o suporte e relate o problema, exija uma resposta e solução do servidor. Se não quiser ter dores de cabeça, troque de provedor. Às vezes vale a pena pagar um pouquinho mais para ter uma melhor qualidade. Hoje temos bons provedores com preços razoaveis.

    2- No artigo, publicado no 72DPI http://www.marcelo-alves.com/72dpi/2009/11/desvendando-o-arquivo-htaccess/, no item “proibe a visualização do arquivo .htaccess” , mostra como proteger o arquivo para que o mesmo não seja visto pelo browser. Ative esse recurso.

    3- Outra quesito de segurança é impedir a listagem dos arquivos das pastas do seu site, no artigo, mostra como fazer isso via .htacess. Uma forma mais simples é criar no “Bloco de Notas” um arquivo “index.html” vazio e colocar em todas as pastas do site. Se o seu site foi escrito em uma linguagem que não seja HTML, tipo PHP ou ASP, coloque esse arquivo “index.html” falso na raiz do site também.

    4- Outra hipótese é o seu servidor estar infectado com vírus. É mais raro, mas já vi casos. Quando isso acontece, podem acontecer várias coisas, depende do vírus.

    5- O seu site pode ter sido invadido por hacker, entre em contato com o servidor. Eles possuem recursos para lhe dar essa informação.

    6- Alguem tem a senha de acesso ftp do seu site ou a descobriu. Se você usa a mesma senha a muito tempo, mude-a por questões de segurança.

    Bem é isso, espero ter ajudado. Me dê um retorno e caso não tenha sucesso mande mais informações para que eu possa tentar te ajudar a descobrir o problema.

 

Deixe um comentário