Du müsstest zuerst einmal unterscheiden zwischen Weiterleitung und Umschreibung. Angenommen Du hast den Inhalt eines Verzeichnisses oder eine einzelne Datei umbenannt oder verschoben, dann bedarf es einer Weiterleitung. Beispiel:
altes-Verzeichnis/alte-Seite.html wurde verschoben in /neues-Verzeichnis/alte-Seite.html
oder:
altes-Verzeichnis/alte-Seite.html wurde verschoben in /neues-Verzeichnis/neue-Seite.html
In diesem Fall erreichst Du mit einer 301-Weiterleitung, dass eine Suchmaschine weiß, dass die "altes-Verzeichnis/alte-Seite.html" zukünftig unter "neues-Verzeichnis/neue-Seite.html" erreichbar ist.
Du möchtest aber nichts verschieben, Du möchtest nur dass die URLs von mit .html auf ohne .html umgeschrieben werden. In diesem Fall ist eine Weiterleitung fehl am Platz und es bedarf nur einer einfachen Umschreibung. Eine Umschreibung teilt nur dem Server mit, dass er für "altes-Verzeichnis/alte-Seite" die Seite "altes-Verzeichnis/alte-Seite.html" ausliefern und anzeigen soll, ohne deren eigentliche URL mit .html bekanntzugeben.
Die einfache Umschreibung ist bei neu angelegten Seiten völlig ausreichend, zum Beispiel um einen Query-String in eine sauber aussehende URL zu verwandeln. Problematisch wird es eigentlich erst dann, wenn die alte Schreibweise bereits den Suchmaschinen bekannt ist. Dann müssen die alten URLs nicht nur umgeschrieben werden, sondern zusätzlich noch auf die neuen URLs umgeleitet werden. Damit aus der Umleitung keine Endlosschleife wird, erhalten die URLs noch einen zusätzlichen Parameter, der dann für die Umleitung gesperrt wird.
Also lieber Apache, bei Aufruf von "altes-Verzeichnis/alte-Seite" liefere "altes-Verzeichnis/alte-Seite.html" aus, hänge noch "?nur=so" an, zeige aber nur die URL "altes-Verzeichnis/alte-Seite" an. Und lieber Apache, bei Aufruf von "altes-Verzeichnis/alte-Seite.html" leite diese um auf "altes-Verzeichnis/alte-Seite", leite aber nicht die "altes-Verzeichnis/alte-Seite.html?nur=so" um, weil die ohnehin niemand kennt und deshalb nicht aufrufen wird und der zusätzliche Parameter nur eine Endlosschleife verhindern soll.
Edit: Und einfach wäre es, wenn Du zum Beispiel nur aus .php .html machen möchtest.
Doch Du möchtest die Extension völlig abhängen und ich weiß nicht, wie dann bei einer Umschreibung eine Datei von einem Verzeichnis unterschieden werden sollte. Probieren kannst Du es, doch nicht das der dann bei Verzeichnissen auch nach Dateien mit .html sucht. Ich hätte es ja mal probiert, nur um zu sehen was dabei herauskommt. Da ich aber mit einem anderen Script beschäftigt bin, habe ich da jetzt weder Lust noch Zeit einige Tests durchzuführen, so dass ich diese gerne Dir überlasse.