Register

💻 Tecnologia - September 6, 2018

O que é .htaccess? Pra que serve o .htaccess? Como configurar .htaccess?

O htaccess é um arquivo de configuração de acesso do servidor Apache. Com ele é possível configurar várias funções de acesso dos usuários a um diretório específico e atrbuir estas regras aos subdiretórios subsequentes. Sendo a utilização de alguns parâmetros de configuração fortemente recomendado para otimização de sites.

O que é o .htaccess ?

htaccess é um arquivo de configuração de acesso do servidor Apache. Com ele é possível configurar várias funções de acesso dos usuários a um diretório específico e atrbuir estas regras aos subdiretórios subsequentes. Sendo a utilização de alguns parâmetros de configuração fortemente recomendado para otimização de sites.

Para que serve o .htaccess ?

Basicamente serve para configurar o tipo de acesso ao diretório de um site web. É possível configurar vários parâmetros:

  • acesso restrito: seja ele com senha, ou mesmo negar/permitir o acesso de qualquer maneira ao diretório
  • páginas de erro padrão: 400 Bad request, 401 Auth Requested, 402 Payment Requested, 403 Forbidden, 404 Not Found, 405 Method Not Allowed, 406 Not Acceptable, 407 Proxy Ath Repid, 408 Request Time Out, 409 Conflicting Request, 410 Gone, 411 Content Len Requested, 412 Precondition Failed, 413 Entity Too Long, 414 URI Too Long, 500 Internal Server Error, 501 Not Implemented, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout, 505 Ver Not Suported.
  • Página padrão: Ex.: index.html
  • Configurar acesso com ou sem www: para evitar canonização de url.
  • Redirecionar Diretivas: 301 Movido permanentemente, 302 Movido Temporariamente

Quando devo usar ?

Devem ser utilizados em certos casos onde não há disponibilidade de acesso ao root ao sistema do servidor e assim os provedores de conteúdo necessitam fazer mudanças na configuração por diretório. Se não houver possibilidade do administrador do servidor efetuar mudanças sempre que necessário nas configurações do servidor, então fica viável a utilização dos arquivos .htaccess. Podemos citar como exemplo, quando os provedores de páginas web estão fornecendo vários sites para seus clientes em uma mesma máquina, e desejam que eles mesmos alterem as configurações desejadas.

Recomendamos que não se utilize o arquivo .htaccess caso você tenha acesso ao arquivo de configuração principal do servidor. É possível usar as configurações principais de autenticação de usuário no arquivo principal, sendo a maneira mais adequada. O uso corrento do .htaccess provê grande auxílio no SEO do web site em questão.

O que devo configurar antes de criar um .htaccess?

 

Se você estiver usando uma hospedagem possivelmente as configurações abaixo já foram realizadas!

Para trabalhar com .htaccess é preciso executar duas configurações antes de iniciar.

1 – É necessário carregar no Apache um módulo chamado “mod_rewrite“, se você estiver usando Ubuntu basta digitar o comando abaixo:

 

2 – Temos que editar o arquivo “/etc/apache2/apache2.conf” e alterar a diretiva “AllowOverride” que por padrão vem setada como “None“, vamos alterar para “All“.

A diretiva “AllowOverride” habilita e define quais serão as diretrizes aceitas, baseado no valor dessa diretiva o Apache identifica o que será aceito ou não no arquivo .htaccess.

AllowOverride None -> Desabilita o uso do .htaccess.

AllowOverride All -> Habilita o uso do .htaccess e todas as diretivas.

Após esses 2 passos é necessário reiniciar o servidor Apache: sudo service apache2 restart

Como criar um arquivo .htaccess?

Geralmente criamos apenas um arquivo .htaccess na raiz do nosso projeto, se forem necessárias regras individuais por diretório então podemos criar outros .htaccess dentro dos respectivos diretórios.

Existem várias diretivas que podem ser adicionadas ao .htaccess, abaixo segue um exemplo básico:

RewriteEngine on -> Sempre que formos trabalhar com “reescrita” de URLs iniciamos o arquivo ativando a engine para reescrita, podemos desativar as regras desse arquivo substituindo “on” por “off“.

As diretivas RewriteCond, RewriteRule foram usadas apenas como exemplo e serão explicadas detalhadamente mais abaixo.

Como criar minhas Condições?

Não é obrigatório, mas podemos criar condições em nosso .htaccess para que posteriormente sejam aplicadas as regras.

Quando adicionamos uma condição usamos a diretiva “RewriteCond” seguido dos itens para teste e condições, podemos usar variáveis do servidor para capturar valores.

Para ler variáveis é necessário iniciar com “%” e colocar o nome entre chaves “{}”, na documentação oficial é possível visualizar a lista completa de todas as variáveis aceitas, abaixo cito algumas:

  • %{REQUEST_FILENAME} -> Contém o nome do script requisitado
  • %{REMOTE_ADDR} -> Contém o IP que enviou a requisição
  • %{HTTP_REFERER} -> Contém o domínio que enviou a requisição
  • %{QUERY_STRING} -> Contém somente QueryString da URL
  • %{REQUEST_METHOD} -> Contém o método usado na requisição POST, GET, PUT, HEAD.

Um exemplo de condição onde as regras só serão aplicadas em requisições onde o valor da variável “REMOTE_ADDR” for igual a “192.168.0.1“:

Outro exemplo onde as regras serão aplicadas quando o valor da variável “REQUEST_METHOD” não for do tipo “GET“, usamos o carácter de negação “!” para isso:

É comum nos arquivos .htaccess  sempre usarmos condições verificando se está sendo requisitado um arquivo ou diretório.

Para esse tipo de verificação pode usar alguns atributos, como no exemplo abaixo que usamos “-f” para verificar se é um arquivo e “-d” para verificar se é um diretório.

RewriteCond %{REQUEST_FILENAME} !-f -> Nesse caso sempre que for requisitado um arquivo (script) “-f” as regras de redirecionamento não serão aplicadas, porque estamos usando o carácter de negação “!“.

RewriteCond %{REQUEST_FILENAME} !-d -> Agora estamos verificando se foi requisitado um diretório “-d“, caso sim as regras de redirecionamento também não serão aplicadas, porque estamos usando o carácter de negação “!“.

Importante citar que as condições e regras são aplicadas na ordem em que são lidas no arquivo .htaccess, ou seja, de cima para baixo.

Como criar minhas Regras?

Quando precisamos criar regras usamos a diretiva “RewriteRule” em conjunto com expressões regulares e se necessário também podemos usar “flags”.

Como já foi citado acima, as regras são aplicadas na ordem em que estão escritas no arquivo, ou seja, de cima para baixo.

Continuando no exemplo usado na diretiva “RewriteCond“:

RewriteRule -> Verifica o que foi passado na URL usando a REGEX “^(.*)$” e redireciona para a página “index.php“, mas esse redirecionamento só sera executado se todas as condições que estão em “RewriteCond” forem satisfeitas.

Exemplo:

Flags

Podemos usar flags para modificar o comportamento da diretiva “RewriteRule“, elas devem ser informadas no final da instrução entre “[]” e separadas por vírgula se forem adicionadas mais de uma flag.

Entre as flags mas usadas temos:

  • L -> Indica que a regra deverá se executada independente da existência de outras regras (na maioria dos contextos essa flag sinaliza o encerramento do processamento das regras que estão abaixo).
  • QSA -> Essa flag força o uso das querys strings, sem ela as query strings são descartadas por padrão.
  • NC -> Informa que a regra não fará distinção entre maiúscula ou minúscula, mais conhecido como case insensitive.

Exemplo:

Para conhecer a lista completa das flags acesse a documentação do Apache.

Quando devo usar o arquivo .htaccess?

Aqui entra um ponto curioso e na minha opinião um pouco contraditório sobre o arquivo .htaccess, a própria documentação oficial do Apache aconselha evitar o uso desse arquivo.

No entanto, de modo geral, o uso de arquivos .htaccess deve ser evitado quando possível.

Motivos descritos na documentação:

1 – Performance: Pois sempre que a propriedade “AllowOverride” está configurada para permitir o uso de arquivos .htaccess, estamos pedindo para o Apache procurar esse arquivo em todos os diretórios e sub-diretórios, causando impacto na performance.

2 – Segurança: Como é possível alterar algumas configurações de acesso através do .htaccess, a documentação oficial cita que esses privilégios não podem ser concedidos para os usuários (entenda desenvolvedores).

Mesmo nos dias atuais praticamente todos os frameworks PHP usam .htaccess, aplicações das mais simples até as mais complexas fazem uso intenso desse arquivo.

Então fica a recomendação para usar somente o necessário nas condições e regras, pois existem casos em que o .htaccess tem centenas de linhas e isso também pode comprometer a performance da sua aplicação.

Exemplos de regras para o arquivo .htaccess

Bloqueando Arquivos

Nesse exemplo estamos redirecionando para “index.php” requisições onde a url contenha arquivos com extensão “.log“, como nesse exemplo “http://site.com.br/log/logs.log“:

Redirecionamento para página de erro

As vezes precisamos redirecionar o usuário para uma página de erro customizada quando ele requisita uma página ou diretório que não existe em nosso site.

Geralmente crio um diretório “erro” contendo minhas páginas para essa  finalidade:

Trabalhando com URL Amigável

1 – Nesse primeiro exemplo temos um redirecionamento simples, mas já deixa nossas URLs amigáveis.

2 – No segundo exemplo a URL “http://site.com.br/produto/1234” será reescrita para “http://site.com.br/produto.php?id=1234“.

Observem que passo um parâmetro “$1“, ele é referente ao grupo “(.*)” da expressão regular.

3 – Nesse outro exemplo a URL fica mais atrativa ainda para SEO, “http://site.com.br/produto/notebook-asus-1234” será reescrita para “http://site.com.br/produto.php?id=1234“:

Observem que passo um parâmetro “$2“, ele é referente ao segundo grupo “([0-9]*)” da expressão regular.