(Außerdem soll der Zugriff auf .htaccess-Dateien aus Sicherheitsgründen gesperrt werden)
Das sollte schon aus der httpd.conf resultieren. Ist das etwa bei dir nicht der Fall?
RewriteRule [1](.*)$ index.php?id=$1
Das geht so nicht. In einer negierten Zeichenklasse werden einzelne Zeichen [^abc] und nicht wort oder wort oder wort ausgeschlossen. Letzteres wäre mit einem negative lookahead möglich, aber unnötig, da du das über eine Condition einfach prüfen kannst.
wobei die drei genannten Ordner durch gesonderte "Deny from all"-.htaccess geblockt werden.
Dann brauchst du auch keine Condition mehr, da du sowieso in den Unterverzeichnissen ein .htaccess-Datei anlegst, kannst du dort auch gleich
RewriteEngine off
notieren. Dann musst du die Ordner auch nicht mehr ausschließen.
Deine Regel könnte also so aussehen:
RewriteRule ^([^/]+/.+) index.php?page=$1 [L]
^([^/]+/.+) = beginnt mit 1 oder n Zeichen ohne Slash, gefolgt von einem Slash, gefolgt von 1 oder n beliebigen Zeichen
RewriteBase /fms/
steht im Widerspruch zu deinen Beispielen. Solltest du die Direktive richtig verwenden, müssten deine Beispiele so aussehen:
/fms/sadsajdk/test.pdf -> /fms/index.php?page=sadsajdk/test.pdf
und die .htaccess-Datei im Ordner /fms/ liegen. Ist das der Fall?
^(ordner1|ordner2|ordner3) ↩︎