Arquivos .htaccess do Apache para que servem e como funcionam? Confira nesse post como criar e configurar regras no seu arquivo .htaccess

arquivo-htaccess-do-apacheNo post de hoje vou escrever sobre os famosos e temidos arquivos .htaccess do Apache.

Praticamente todo profissional que desenvolve para WEB  e trabalha com o servidor Apache já deve ter ouvido falar pelo menos 1 vez desse arquivo.

Porém o arquivo .htaccess ainda causa muitas dúvidas e nesse post vou procurar responder alguns questionamentos:

  • Para que serve?
  • Onde o arquivo .htaccess pode me ajudar?
  • O que devo configurar antes de criar um .htaccess?
  • Como criar um arquivo .htaccess?
  • Como criar minhas condições?
  • Como criar minhas regras?
  • Quando devo usar o arquivo .htaccess?

 

Post relacionado:  Configurando Virtual Host no Ubuntu em 10 passos

 

Para que serve?

para-que-serve-um-arquivo-htaccess

Os arquivos .htaccess são arquivos de configurações do servidor Apache e servem para alterar configurações de acesso por diretório.

Para quem trabalha com hospedagens imaginen que seu diretório é a partir da pasta raiz que pode ser “www“, “public_html” ou etc, pode mudar o nome conforme a hospedagem.

Usando apenas um arquivo no diretório raiz é possível definir regras (diretrizes) para todos os diretórios de nossa aplicação ou criar um arquivo .htaccess para cada diretório e definir regras individuais.

Quando um site que possui .htaccess é acessado, o Apache primeiro carrega todas as regras existentes no arquivo para depois procurar pela página requisitada pelo usuário, sempre respeitando as regras carregadas.

Fluxograma-acesso-com-htaccess

 

Onde o arquivo .htaccess pode me ajudar?

quais-regras-posso-usar

Podemos usar o arquivo .htaccess com diferentes funcionalidades, mas para isso é necessário que a diretiva “AllowOverride” sempre esteja habilitada, abaixo listo algumas das funcionalidades que podemos adicionar:

  • Restringir acesso com ou sem senha;
  • Bloquear arquivos ou diretórios;
  • Redirecionamento para páginas de erro;
  • URLs amigáveis;
  • Cachear recursos da página;
  • e etc;

 

O que devo configurar antes de criar um .htaccess?

O-que-devo-configurar-antes-de-começar

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

Para trabalhar com .htaccess é preciso executar 2 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:

 

Como criar um arquivo .htaccess?

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.

estrutura-arquivos

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?

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?

como-configurar-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:

  • URL com “http://site.com.br/123” será redirecionando para “index.php“;
  • URL com “http://site.com.br/contato.php” acessa o script “contato.php“;
  • URL com “http://site.com.br/produtos/” acessa o diretório “produtos“;

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?

quando-não-usar-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

exemplo-de-regras-no-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.

  • URL “http://site.com.br/home” redireciona para “http://site.com.br/index.php
  • URL “http://site.com.br/servico” redireciona para “http://site.com.br/servico.php
  • URL “http://site.com.br/contato” redireciona parra “http://site.com.br/contato.php

 

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.

 

Outros itens para pesquisar

itens-pesquisar

Existem muitas opções de configuração disponíveis, deixo abaixo algumas dicas para pesquisas complementares:

  • RedirectMatch
  • RewriteOptions
  • RewriteMap
  • RewriteBase

 

Post relacionado:  Ativar e Desativar módulos Apache no Ubuntu | Dica

 

Conclusão

Bom pessoal nesse post descrevi basicamente como funciona e alguns exemplos de como podemos trabalhar com arquivos .htaccess em nossas aplicações WEB.

Como já citei acima, não exagerem na quantidade de regras do arquivo .htaccess, é sempre bom ponderar se existe mesmo a necessidade de inserir determinadas regras.

Espero que tenham gostado e até a próxima …

Se você gostou compartilhe esse post nas redes sociais, ajude o blog DevWilliam a crescer!

Show Buttons
Hide Buttons