Apache - Os arquivos .htaccess

Fevereiro 2017


Os arquivos .htaccess são arquivos de configuração do Apache, que definem regras em um diretório e, em todos os subdiretórios (que não têm tal arquivo dentro dele). Podemos utilizá-lo para proteger um diretório com uma senha, ou alterar o nome ou a extensão da página de índice, ou ainda, proibir o acesso ao diretório.

Interesse dos arquivos .htaccess

Os arquivos .htaccess podem ser utilizados em qualquer diretório virtual, ou subdiretório.

As principais razões da utilização dos arquivos .htaccess são:

  • Gerenciar o acesso a determinados arquivos.
  • Adicionar um mime-type.
  • Proteger o acesso a um diretório com uma senha.
  • Proteger o acesso a um arquivo com uma senha.
  • Definir as páginas de erro personalizadas.

Princípio dos arquivos htaccess

O arquivo .htaccess fica localizado no diretório no qual ele deve atuar. Ele atua sobre as permissões do diretório que o contém, e todos os seus subdiretórios. Você pode colocar outro arquivo .htaccess em um subdiretório de um diretório já controlado por um arquivo .htaccess.
O arquivo .htaccess do diretório parente continua em « atividade », enquanto as funcionalidades não forem reescritas.

Como as funcionalidades destes arquivos são muito poderosas, leia bem este tutorial antes de criar as suas.


No Windows, obviamente, é impossível criar um arquivo .htaccess, já que o Windows não te autorizará a salvar o arquivo tal qual. Veja os passos a seguir:

  • Criar um arquivo de texto « arquivo .htaccess »
  • Renomear o arquivo excluíndo « arquivo »


Observação: Dependendo do seu editor, você também pode salvar o arquivo, diretamente, em .htaccess. No Bloco de notas, coloque entre aspas o nome do arquivo enquanto que o UltraEdit gerencia o nome.

Impedir o acesso aos recursos

Um arquivo .htaccess é composto de duas seções:

  • A primeira seção tem caminhos para arquivos que contêm as definições dos grupos e usuários


AuthUserFile /diretório/do/seu/arquivo/.ArquivoDeSenha  
AuthGroupFile / diretório/do/seu/arquivo /. ArquivoDeGrupo
AuthName "Acesso restrito"
AuthType Basic



*


*
    • AuthUserFile define o caminho de acesso absoluto para o arquivo de Senha.
    • AuthGroupFile define o caminho de acesso absoluto para o arquivo de grupo.
    • AuthName leva à exibição, no navegador Internet, de: "Digite seu nome de usuário e sua senha. Domínio: "Acesso Restrito" »
    • AuthType Basic precisa que o AuthUserFile deve ser usado para autenticação.
  • A segunda parte contém a definição das condições de acesso:


<Limit GET POST>  

Require valid-user
{instrução de acesso a ser satisfeita}
</Limit>



*


*
    • A marca LIMIT possui, como atributo, o valor GET (com letras maiúsculas) e/ou o valor POST, para definir o tipo de método do protocolo HTTP, ao qual a restrição se aplica
    • require valid-user especifica que só são autorizadas as pessoas identificadas. Também é possível precisar, explicitamente, o nome das pessoas autorizadas a se identificar: require user {username}




  • No Unix, o caminho de acesso para os arquivos de senha e de grupos é assim:

/diretório1/ diretório2/.../.ArquivoDeSenha
  • No Windows, o caminho de acesso contém barra inversa (barra invertida ou contrabarra), ao contrário da notação Unix:

c:\ diretório1/ diretório2\...\. ArquivoDeSenha

Proteger um diretório com uma senha

É uma das aplicações mais úteis do arquivo .htaccess, porque ela permite definir,de forma segura (usando um login e uma senha), os direitos de acesso aos arquivos, por determinados usuários.

A sintaxe é a seguinte:

AuthUserFile {localização do arquivo de senha}  
AuthGroupFile { localização do arquivo de grupo}
AuthName "Acesso restrito"
AuthType Basic
<LIMIT GET POST>

Require valid-user
</LIMIT>


O comando AuthUserFile define a localização do arquivo com os logins e as senhas dos usuários autorizados à acessar a um determinado recurso.

O comando AuthGroupFile define a localização do arquivo com os grupos de usuários autorizados a se identificar. É possível substituir essa afirmação declarando o seguinte arquivo: /dev/null.

Veja um exemplo do arquivo .htaccess :

ErrorDocument 403 http://www.ccm.net/acessorestrito.php3  
AuthUserFile /diretório/do/seu/arquivo/.ArquivoDeSenha
AuthGroupFile /dev/null
AuthName "Acesso restrito ao site Kioskea"
AuthType Basic
<LIMIT GET POST>

Require valid-user
</LIMIT>


O arquivo de senha é um arquivo de texto, devendo conter, em cada uma de suas linhas, o nome de cada usuário seguido de dois pontos (:), e da senha criptografada (solução recomendada) ou em claro.

Veja um exemplo de arquivo de senha não criptografado (aqui .ArquivoDeSenha)

JFPillou:Toto504  
Damien:Robert(32)
Comma:Joe[Taxista]

Veja o mesmo arquivo, com senhas criptografadas:
JFPillou:$apr1$Si0.....$teyL5Y7BR4cHj0sX309Jj0  
Damien:$apr1$TD1.....$sfPTHjoufoNsda4HsD1oL0
Comma:$apr1$zF1.....$wYKqRu2aVYlAEQnxVkly8.



. ArquivoDeSenha é um simples arquivo de texto contendo os nomes dos usuários seguidos de um: depois, da senha criptografada (ou não) deste usuário.
Este arquivo de senha não deve ser colocado em um diretório virtual na Internet (mas como fazer de outra maneira se não temos um servidor web e que o nosso site foi hospedado por um terceiro?). Além disso, é preciso misturar as maiúsculas, as minúsculas, os números e os símbolos no nome do arquivo...

Criptografar senhas

Apache fornece uma ferramenta para gerar, rapidamente, senhas criptografadas (tanto no Windows como no Unix); trata-se do utilitário htpasswd, acessível no subdiretório bin do Apache.

A sintaxe deste utilitário é a seguinte:

  • Para criar um novo arquivo de senha:

htpasswd -c {caminho do arquivo de senha} usuário
  • Para adicionar um novo usuário/senha ao arquivo existente:

htpasswd {caminho do arquivo de senha } usuário 


A senha será pedida em linha de comando com uma confirmação.
Veja este exemplo:

htpasswd -c /www/secure/.htpasswd JFPillou



Veja um pequeno utilitário para criptografar suas senhas on-line:
<form action="crypt.php3" method="post">

Usuário: <input type="text" name="login" size="8">

Senha: <input type="password" name="passwd" size="8">

<input type="submit" value="criptografar">

</form>

Impedir o acesso a um diretório através de um domínio

A sintaxe para bloquear o acesso de um diretório, através de um domínio, é a seguinte:

Allow (all, [lista do domínio])  
Deny (all, [lista do domínio])
Order (Allow,Deny ou Deny,Allow)


Order Deny, Allow  
Deny from...ONomeDoDomínio.com


Todas as pessoas (pedidos) vindo do domínio. ONomeDoDomínio.com não poderão ter acesso aos recursos inclusos no diretório e seus subdiretórios. O comando Order é usado para precisar, explicitamente, que o comando Deny vai cancelar o efeito do Allow, e não o contrário.

Veja um exemplo de restrição de acesso:

ErrorDocument 403 http://www.ccm.net/acessorecusado.php3  
AuthUserFile /diretório/do/seu/arquivo/.ArquivoDeSenha
AuthGroupFile /dev/null
AuthName "Acesso restrito ao site Kioskea"
AuthType Basic
<LIMIT GET POST>

order deny,allow
deny from all
allow from 193.48.172.2
require user JFPillou
</LIMIT>


Neste caso, o acesso só será possível para o usuário JFPillou apartir do endereço IP 193.48.172.2 e com a senha correta.

Impedir o acesso ao arquivo privado

Por padrão, Apache aplica as restrições do arquivo .htaccess a todos os arquivos do diretório em que se encontra, assim como a todos os arquivos contidos nos seus subdiretórios.

Também é possível restringir o acesso para um, ou vários arquivos, do diretório, graças à marcação<Files>.

Veja um exemplo de restrição aos arquivos admin.php3 e admin2.php3 :

<Files admin.php3>  

AuthUserFile /diretório/do/seu/arquivo/.ArquivoDeSenha
AuthGroupFile /dev/null
AuthName "Acesso restrito ao site Kioskea"
AuthType Basic
<LIMIT GET POST>

require user JFPillou
</LIMIT>

</Files>

<Files admin2.php3>

AuthUserFile / diretório/do/seu/arquivo /.ArquivoDeSenha
AuthGroupFile /dev/null
AuthName "Acesso restrito ao site Kioskea "
AuthType Basic
<LIMIT GET POST>

require user JFPillou
</LIMIT>

</Files>




Utilizar apenas uma marca <Files> por arquivo.
Caso contrário, o seguinte erro é relatado no arquivo de log de erros:

.htaccess: Multiple <Files> arguments not (yet) supported. 


Só para informação, saiba que, desde o Apache 1.3, é aconselhável usar a marca <FilesMatch> ao invés da marca <Files>.
Esta nova marca suporta apenas um argumento, mas também pode processar vários arquivos, graças uma expressão regular.

Impedir o acesso a um tipo de arquivo por um domínio



<Files *.png>  

Order Deny, Allow
Deny from .ONomeDoDomínio.com
</Files>


Todos os pedidos (consultas) vindos do domínio. ONomeDoDomínio.com não poderão ter acesso às imagens, cuja extensão é .png, incluídas nos diretórios e seus subdiretórios.

Autorizar o acesso a um grupo de arquivos por um domínio eum país



<Files php*>  

Order Allow, Deny
Deny from all
Allow from .phpbrasil.com
Allow from .br
</Files>


Todos os pedidos (consultas) vindos do domínio . phpbrasil.com ou dos domínios terminados por .br poderão ter acesso aos arquivos começando por php (por exemplo, os arquivos phpbomdia.html, phptchau.vxf) incluídos no diretório e seus subdiretórios.

Proteger um diretório com um login

Este método (muito menos seguro que o anterior) permite a autenticação, de baixo nível, só pelo nome do usuário. A sintaxe é a seguinte:

Require (user [lista dos usuários], group [lista dos grupos], valid-user)

Veja um exemplo de linha do arquivo .htaccess :
Require User Damien Comma PumpPHP Jeff Rastapaye


Qualquer usuário que queira entrar no diretório, ou em um de seus subdiretórios, será recusado se não se identificar, dando um nome da lista.

Exigir que um usuário preencha, pelo menos, uma das condições

Veja a sintaxe:

Satisfy (any, all)


Order Allow, Deny  
Deny from all
Allow from .free.fr
Require User Damien Comma PumpPHP Jeff Rastapaye
Satisfy Any


Isto significa, que o acesso ao diretório será bloqueado para todos, exceto para aqueles que se identificam, e para as consultas vindas do domínio .free.fr.

Gerenciar os tipos de arquivos

Um tipo MIME (em inglês MIME type) é um conjunto de tipos de arquivos padrão, que associam a extensão de um determinado à uma aplicação, para automatizar o lançamento da mesma.

Adicionar um tipo MIME a um diretório

A sintaxe é a seguinte:

AddType (mime/type [lista de extensões])

Veja o exemplo da execução do arquivo .htaccess :
AddType image/x-photoshop PSD  
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .htm


O servidor irá enviar o arquivo ao navegador Internet dizendo-lhe para executar o programa Photoshop (se este estiver instalado em sua máquina) e dando-lhe o arquivo.

Geralmente, isso é usado para arquivos que exigem um plug-in especial, não reconhecido pelo seu navegador.

Este comando também pode cancelar qualquer item predefinido. Assim sendo, você pode salvar um arquivo .wav com uma extensão .gif, e especificar para o navegador, que ele considere os arquivos .gif como arquivos de áudio!

Na prática, portanto, podemos usar este comando para instruir o PHP para analisar outras extensões de arquivo, .htm, por exemplo.

Forçar todos os arquivos de um diretório para um tipo MIME

Veja a sintaxe a ser usada:

ForceType (mime/type)


Por exemplo, com a seguinte linha, todos os arquivos do diretório com arquivo .htaccess serão considerados como arquivos .jpg, seja qual for a sua extensão:

ForceType image/jpg

Este tipo de comando pode ser utilizado nas balizas!

Definir as extensões dos arquivos padrão

A sintaxe a ser seguida é:

DefaultType (mime/type)

Por exemplo
DefaultType text/html


Esta opção permite que você defina o comportamento padrão do navegador face às extensões desconhecidas.
Aqui, ele aceitará qualquer arquivo desconhecido (por exemplo 'bomdia', 'Rastapaye.phpbrasil') como documento HTML.

Personalização das mensagens de erro

É uma característica prática porque permite definir uma página padrão para um determinado tipo de erro (Veja todos os códigos de erro e significado)...

Isso permite, por um lado, que o usuário seja guiado, ao invés de, apenas, exibir a página de erro do navegador, e de animar a navegação, mesmo em caso de erro.

ErrorDocument (código-com-3-números [nome do arquivo, texto ou URL])


As duas linhas seguintes são utilizadas para definir páginas com erro personalizadas, caso o acesso a um documento seja bloqueado ou, que o documento não exista:

ErrorDocument 403 /erros/403.php3  
ErrorDocument 404 /erros/404.php3


Desta forma, você pode enviar uma mensagem de erro personalizada, substituindo os arquivos incluídos com o navegador.
Veja alguns dos erros mais comuns a serem personalizados:

  • 401 Unauthorized: a pessoa não conseguiu se identificar.
  • 403 Forbidden: o servidor não pode responder ao seu pedido.
  • 404 Not Found: o servidor não encontrou o documento solicitado.

Alterar o arquivo de índice padrão

O arquivo do índice é aquele que é exibido quando nenhum nome de arquivo foi definido no URL (por exemplo http://www.meuservidor.com/diretorio). Isso permite que o navegador não precise listar todos os arquivos do diretório (por razões de confidencialidade).

A sintaxe para executar este tipo de operação é a seguinte:

DirectoryIndex (fichiers)

Veja um exemplo da aplicação:
DirectoryIndex index.php index.html index.phtml /erreurs/403.php


Ao tentar acessar o diretório, sem especificar a página a ser exibida, o Apache vai usar a diretiva DirectoryIndex. Em geral, por padrão, esta diretiva aponta para index.html , e para index.htm.

Pode-seperceber com o exemplo que o Apache vai começar por buscar index.php e index.html e, em seguida, index.phtml. Se nenhum destes três arquivos existirem, a página 403.php (que fica na raiz) se exibirá para evitar a enumeração do diretório.

Veja também

Publicado por pintuda. Última modificação: 12 de outubro de 2016 às 21:29 por ninha25.
Este documento, intitulado 'Apache - Os arquivos .htaccess', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.