.htaccess: Como usar negação em RewriteRule com lookahead negativo

Ao trabalhar com URLs amigáveis usando .htaccess, é comum precisar aplicar regras específicas sem afetar outras rotas. Um caso clássico é quando precisamos ignorar determinados padrões dentro de uma RewriteRule — e é aí que entra o uso de negação.

O Problema

Você tem uma estrutura de URLs para cursos EAD e deseja:

  • Listar todos os cursos em /ead
  • Exibir detalhes de cursos com base na URL
  • Mas ignorar uma rota específica, como /ead/polos

Sem tratamento adequado, a regra de detalhes pode capturar URLs que não deveriam ser processadas, causando conflitos.

A Solução

Utilizar negação com lookahead negativo na expressão regular para impedir que determinadas palavras sejam interpretadas pela regra.

### EAD
 
# lista os cursos do EAD
RewriteRule ^ead\/?$ /cursosead.php [L,NC]
 
# exibe os detalhes do curso (ignorando /ead/polos)
RewriteRule ^ead\/(?!polos)([A-Za-z0-9-]+)\/([A-Za-z0-9-]+)?$ /cursosead-detalhes.php [L,NC]

Explicação técnica

  • (?!polos) → Lookahead negativo: impede que a URL contenha “polos” logo após /ead/
  • ([A-Za-z0-9-]+) → Captura o primeiro segmento da URL
  • ([A-Za-z0-9-]+)? → Captura opcional do segundo segmento

Com isso:

  • /ead/ads → funciona
  • /ead/ads/matriz → funciona
  • /ead/polos → ignorado pela regra

Conclusão

O uso de negação em regras do .htaccess é essencial para evitar conflitos entre rotas. O lookahead negativo permite criar regras mais precisas e seguras, garantindo que URLs específicas não sejam capturadas indevidamente.

Esse tipo de abordagem é muito útil em projetos com URLs amigáveis e múltiplas rotas dinâmicas.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima