meine rewrite regel:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !.(gif|jpg|png|css|pdf|php)$
RewriteRule (.+)/ index.php?show=$1es hat was mit forcetype zu tum, weil der server wenn er folgende url bekommt http://domain.tld/foo den mimetype von foo auf php setzt, noch bevor meine rewrite regel zum tragen kommt.
ForceType hat aber AFAIK keinen Einfluss auf die URL bzw. ihre Verarbeitung, sondern ändert einfach nur den Mime-Typ. Der Mime-Typ aber wiederum hat keinerlei Einfluss auf die Rewrite-Regeln. Von daher kann das nicht zusammenhängen.
Du hast geschrieben, daß es funktioniert, wenn foo keine HTML- oder PHP-Datei ist. Meinst Du damit, daß die Dateien "foo.html" oder "foo.php" direkt aufgerufen werden? Ich gehe mal davon aus, daß Du nicht eine Datei "foo" meinst, denn daraus kann keiner erkennen, ob es eine HTML- oder PHP-Datei ist.
Wenn meine Annahme richtig ist, dann bedeutet das, daß in dem betreffenden Verzeichnis Multiviews aktiv ist. Der Server sucht sich also zuerst die passende Datei zur URL /foo, findet foo.php, schleust foo.php in Deine RewriteCond ein und stellt fest, daß foo.php nicht auf Dein Muster passt (der Dateiname soll ja _nicht_ auf .php enden). Bleibt nur eines übrig: Datei normal weiterverarbeiten.
Über die Aktion bei foo.html bin ich mir nicht ganz sicher. Zwar passt das RewriteCond-Muster, aber jenes bei RewriteRule könnte wegen dem enthaltenen Schrägstrich Probleme bereiten ("(.+)/").
Soviel zur Theorie. Praktisch hast Du erstens RewriteBase vergessen (Pflicht in jeder .htaccess, wenn mod_rewrite benutzt wird) und solltest zweitens nicht den physischen Dateinamen (REQUEST_FILENAME) prüfen, wenn die URL gar nicht auf eine physische Datei zeigt. Eigentlich sollte eine umzuschreibende URL besser gar nicht auf eine physische Datei zeigen.
Mein Ansatz:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !.[a-z]+$
RewriteRule (.*) index.php?show=$1
So in dem Dreh. Die Regel wird nur angewendet, wenn die URI ohne eine Dateiendung daher kommt. Möglicherweise noch eine Zeile
options -multiviews
einfügen.
Gruß,
soenk.e