Willi: mod_rewrite: Fehler in der .htaccess

Beitrag lesen

Hallo Patrick,

RewriteRule   ^([1]*)$ $1.php

Mit Deinem gierigen RegExp wundert mich das nicht. Schau mal passiert:
^: Beginn des Strings (Nullzeichen)

Nur hier gibst Du keine Begrenzung! Was passiert also? index wird zu index.php gewandelt, da greift aber wieder die RegExp: Im String index.php steht ja nichts davor (^), ist kein slash und kein Unterstrich enthalten ([1:1]), besteht aus 0 bis vielen Zeichen bis zum Stringende, also wird versucht wieder umzuleiten zu $1.php, was jetzt index.php.php ist und auch gematcht wird; nach ein paar mal hast Du index.php.php.php.php.php.php.php - und es passt immer noch zum Suchmuster. Die Ressource gibt es nicht.

Stimmt.
Aber genau deswegen gibt es doch die RewriteConds:
RewriteCond   %{REQUEST_FILENAME}   !-d
RewriteCond   %{REQUEST_FILENAME}   !-f
Nur wenn es die Datei unter diesen Namen nicht gibt, wird weitergeleitet. Nach dem ersten Umleiten von index auf index.php sollte doch *eigentlich* daher nicht mehr umgeleitet werden - oder?

Grüße,
Willi


  1. kein slash und kein Unterstrich
    *: keins oder beliebig viele Zeichen bis
    $: Stringende ↩︎ ↩︎