Grundsätzlich musst Du wissen, dass die Regulären Ausdrücke ist (im Normalfall) auf 'nur' den Request-Teil der URL beziehen. Es gibt noch mehr Variablen, die man prüfen kann, aber das findest Du alles in der (zugegebenermassen recht kryptischen) Doku. So dann auch %{REQUEST_FILENAME} welches den angeforderten Dateinamen (oder auch nur Verzeichnis) beinhaltet. -f bzw. -d bedeuten File bzw. Directory exists, das ! davor negiert, also not.
%{HTTP_HOST} ist der angefragte Host und schlussendlich ist noch das [L] wichtig, welches die Ausführung der RewriteEngine stoppt.
Hier Beispiele (ungetestet) wie Du a) nicht-existente Aufrufe abfangen und zur index.php weiterleiten kannst b) www. aus der Domain wegbekommst
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f # datei existiert nicht RewriteCond %{REQUEST_FILENAME} !-d # verzeichnis existiert nicht RewriteRule ^(.*)$ http://domain.tld/index.php/$1 [L]
Du kannst, aber es fragt sich ob das sinnvoll ist, weil die htaccess Datei doch im doc-root der Domain liegt ;) Andersrum wird ein Schuh draus: www durch nen Platzhalter ersetzen um alle Subdomains umzuleiten.
Aus Performancegründen möchte ich die Rule in einer lokalen http.conf include ablegen - und auch weil sie auf mehreren virtuellen Hosts angewendet werden soll (deswegen auch die Domain-Unabhängigkeit...)
Mit der Subdomain ist natürlich ein Argument, ich verwende also:
Andersrum wird ein Schuh draus: www durch nen Platzhalter ersetzen um alle Subdomains umzuleiten.