Currently when I do
redirect 301 "abc" "abc.hml", the second URL is also redirecting tohttp://example.com/abc.html/def.html.
A diretiva mod_alias Redirect é o prefix matching , o que explica seu redirecionamento indesejável.
Mas também não misture redirecionamentos de mod_alias (por exemplo, RedirectMatch e Redirect ) e mod_rewrite (ou seja, RewriteRule ). Como eles são módulos diferentes, eles são executados em momentos diferentes (geralmente mod_rewrite primeiro), independentemente da ordem aparente, então você pode acabar com conflitos confusos.
Tente o seguinte na configuração do seu servidor, para internamente reescrever /abc to /abc.html
RewriteRule ^/abc$ /abc.html [L]
No entanto, você terá problemas se /abc for um diretório físico no sistema de arquivos, já que mod_dir normalmente tentará "consertar" o URL adicionando uma barra. Então, você precisaria tornar a barra final opcional:
RewriteRule ^/abc/?$ /abc.html [L]
Além disso, desative MultiViews se já estiver ativado:
Options -MultiViews
MultiViews (parte de mod_negotiation) faz o mesmo tipo de coisa (reescreve internamente /abc to /abc.html ou /abc.php ou o que achar) mas executará antes mod_rewrite recebe um chance.