RewriteRule (.+).html$ /$1 [redirect=permanent,last,nosubreq]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+) $1.html [last]
Das hatte ich schon versucht, es hat nicht den gewünschten Effekt. Es ändert sich nichts: Die erste Regel wird trotzdem wieder auf den Subrequest angewendet. Der Rewrite-Log ist identisch. /bla/test wird also auf /bla/test.html umgeschrieben und wieder im Subrequest auf /bla/test weitergeleitet.
Ich teste auf 1.3.26 und 2.0.48 für Win32 und 1.3.28 für Linux, alle zeigen dasselbe Verhalten.
nosubreq dagegen sagt nur, dass diese Regel *übersprungen* werden soll, falls ein Subrequest durchgeführt wird.
Ja, das hört sich in der Theorie logisch an, deckt sich aber kein bisschen mit meinen Beobachtungen. Dies führt etwa zu einer Endlosschleife:
RewriteRule (.+).html$ /$1 [last,nosubreq]
RewriteRule ^(.+) $1.html [last,nosubreq]
Jede andere Kombination, ob mit oder ohne last und nosubreq, an welcher Stelle und in welcher Kombination auch immer, hat denselben Effekt. Es werden unendlich viele Subrequests gestartet, in denen die Regeln immer wieder angewendet werden. Die Flags scheinen keine Auswirkung zu haben. Grmbl.