Ich hab das Problem nun wie folgt gelöst und es funktioniert auch wie ich mir das vorgestellt habe:
RewriteCond %{REMOTE_ADDR} !^123.456.789.123$
Sieht gut aus. Für Beispiel-IP-Adressen gibt es übrigens RFC 5735. Bei der Von dir gegebenen besteht aber ohnehin keine Gefahr, dass sie real existiert.
RewriteCond %{REQUEST_URI} !^/maint/(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^/maint/
Sollte denselben Zwecke erfüllen.
Das [NC] kannst du dir sparen, wenn du dir sicher bist, dass es maint und nicht MainT oder Maint oder mainT oder ähnliches ist.
(.*)$ kannst du ebenfalls sparen - ob etwas mit einer bestimmten Zeichenkette beginnt oder ob bis zu Ende eine bestimmte Zeichenkette (oder nichts) folgt ist egal. Entscheidend wäre der Unterschied nur, wenn du das was dahinter kommt später weiterverwenden möchtest.
RewriteRule ^(.*)$ http://example.com/maint/index.html [R=307,NC,L]
Das NC-Flag ist auch hier nicht nötig, du matcht im Ausdruck ohnehin ^(.*)$ - und bei "irgendwas" ist Groß- und Kleinschreibung egal.
Eigentlich kannst du den Ausdruck auch auf .* reduzieren, die Klammern und das ^ String-Anfang und String-Ende $ machen den Ausdruck nur komplizierter und performancelastiger. Das ist zwar in diesem Fall vernachlässigbar, wenn du aber in einer 20-MB-Datei nach Zeichenketten suchst, sind solche Optimierungen oft starke Performancebringer.