Peter Ziebig: mod_rewrite problem

Hallo liebes Forum,

ich bin am verzweifeln und finde den Fehler nicht. Ich arbeite mit einer .htaccess-Datei um mod_rewrite zu benutzen. Soweit funktioniert das auch ganz gut, allerdings bekomme ich bei einer Zeile immer Probleme.

Ich wollte die folgenden zwei Zeilen...

RewriteRule ^berlin.php(.*) /home/foo/bar/berlin.php$1
RewriteRule ^hamburg.php(.*) /home/foo/bar/hamburg.php$1

zu dieser Zeile zusammen fassen:

RewriteRule ^(.*).php$ /home/foo/bar/$1.php?parameter=konstant
                                         ^^
Ich bekomme jedoch immer einen Error 500 (Internal Server Error). Ich sehe ehrlich gesagt nicht, wo das Problem liegt. Wenn ich statt $1 einen festen Dateinamen eingebe, funktioniert es. Bin für jeden Hinweis Dankbar.

  1. echo $begrüßung;

    RewriteRule ^(.*).php$ /home/foo/bar/$1.php?parameter=konstant
                                             ^^
    Ich bekomme jedoch immer einen Error 500 (Internal Server Error).

    Hast du Zugriff auf das Error-Log? Dort steht genauer, was das Problem ist. Mitunter ist auch noch die Konsultation des RewriteLog (bzw. dessen vorherige Einrichtung) notwendig. So kann man nur raten. Ist /home/foo/bar/ zufälligerweise das Verzeichnis, in dem die .htaccess liegt? Wenn ja, dann hast du eine Endlosschleife gebaut, denn die RewriteRule erzeugt einen neuen internen Request, der ebenfalls von allen .htaccess, die in seinem Weg liegen, behandelt wird. In dem Fall wären mit einer (oder zwei) RewriteCond real existierende Dateien (und Verzeichnisse) von der RewriteRule auszunehmen.

    Manchmal hilft auch ein RewriteBase.

    Wenn ich statt $1 einen festen Dateinamen eingebe, funktioniert es.

    Wobei sich das nicht nach meiner Vermutung anhört. Wie auch immer, ohne Error-Log-Inspektion wirst du nicht weiter kommen, wenn nicht gerade zufälligerweise jemand so ein Problem schonmal hatte.

    Was machst du eigentlich mit den \ im Substitution-Teil der RewriteRule? Die sind nur für den regulären Ausdruck erforderlich, und auch da nur für Zeichen mit Sonderbedeutung. / ist kein solches Zeichen.

    echo "$verabschiedung $name";