/index.php/ aus URLs nachträglich entfernen mit .htaccess-Redirect

In vielen CMS (WordPress, Contao, Drupal, ProcessWire, …) besteht die Möglichkeit, saubere, sprechende URLs zu verwenden. Dafür benötigt man größtenteils das aktivierte mod_rewrite-Modul und die Möglichkeit .htaccess-Dateien zu nutzen. Habt ihr eure Website aber erstmal auf einem Server laufen, wo dies nicht gegeben ist, landet oft ein index.php in eurer URL und dahinter dann der Dateiname der jeweiligen HTML-Seite, als Beispiel: example.com/index.php/unser-unternehmen.html

Nun wechselt ihr aber den Server und mod_rewrite ist möglich, also schaltet ihr die Umschreibung eurer URLs ein und das index.php verschwindet: example.com/unser-unternehmen.html

Problem: die URLs mit index.php-Zusatz sind in vielen CMS nun ungültig und werden nicht mehr erkannt, folglich liefert euer Server einen 404, was weder euren Besuchern gefällt, noch Google. Ihr müsst die URLs also umleiten und am einfachsten geht das in eurer .htaccess-Datei:

RewriteEngine on
RedirectMatch 301 ^/index.php/(.*) /$1

Damit wird – als Beispiel – example.com/index.php/unser-unternehmen.html auf example.com/unser-unternehmen.html weitergeleitet und zwar mit dem HTTP-Statuscode 301 „Permanent umgezogen“.