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.