Bob: mod_rewrite

Beitrag lesen

Na ja, du kannst das natürlich mit gezielten Redirects wieder gerade biegen, wenn davon aber auch HTML-Links betroffen sind, würde ich doch davon abraten. Zumindest mit dem HTML-Element <base href...> könntest du das HTML-technisch richten.
Geht das auch für CSS und JS?

Ja, das betrifft alle relativ referenzierten Ressourcen, egal, ob jetzt in <img...> <script...> oder sonstwas.

YMMD :) Danke, jetzt habe ich für den letzten Anwendungsfall noch folgende Regel:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/?)([a-zA-Z-]+)$ /cms.php?news_item=$2 [L]

Das passt wohl so. Wenn du das nur im Verzichniskontext, also z.B. .htaccess-Dateien, verwendest, kannst du '(/?)' auch weglassen. Dort prüfst du immer gegen einen lokalen filepath (also von /var/www/foo wird das Prefix /var/www/ entfernt, sodass die RegEx auf foo angewendet wird). Aber ich glaube, du wolltest ehr, dass der Slash am Ende optional ist, also foo bzw. foo/. Dann müsstest du als RegEx  ^([a-zA-Z-]+)/?$  verwenden. Damit ist übrigens dann auch die Condition, die auf existierende Dateien prüft, (in der Regel) überflüssig: Deine RegEx schließt den Punkt aus, d.h. filepaths mit einer durch einen Punkt eingeleiteten Dateiendung würden gar nicht durch die RegEx erfasst werden.