Hab jetzt die Regel fertig:
RewriteRule ^(^.*/)([^/.]*)(.|)(.*)$ index.php?dir=$1&site=$2&typ=$4 [L]
Warum du zwei Mal ^ - also Beginn der Zeichenkette - hintereinander notierst, wird mir nicht ganz klar.
404 bei
-"dir/file"
Das dürfte wohl nicht erfüllt sein. Geht es eigentlich immer nur um eine Verzeichnisebene oder auch mehrere? Also foo/bar/file.ext
ich würde da eher
RewriteRule ^(.*/)(?:([^/.]*).([a-z]{2,4}))?$ index.php?dir=$1&site=$2&typ=$3 [L]
nutzen (RegEx ab apache 2.0, sonst musst du ?: entfernen und die letzte backreference auf $4 ändern).
Matched auf
foo/.ext
foo/bar.ext
foo/
(auch foo/bar/.ext etc.)