Frank Stabenau: mod_rewrite: was mache ich falsch?

Hi,

irgendwie bekomme ichs nich gebacken :(

Der Apache hat auch mod_rewrite...

Ich habe eine test.php erstellt mit 3 Links:

<p><a href="test.php?inhalt=1">link 1</a></p>
<p><a href="test.php?inhalt=2">link 2</a></p>
<p><a href="test.php?inhalt=3">link 3</a></p>

die dann jeweils folgendes includen:

switch($inhalt){

case "1"; include("test/inhalt1.php"); break;
case "2"; include("test/inhalt2.php"); break;
case "3"; include("test/inhalt3.php"); break;

default: include("test/inhalt.php");
}

funst auch...

meine htaccess siet so aus:

RewriteEngine On
RewriteRule ^inhalt(.*).html$ test.php?inhalt=$1

Nun müsste ich doch eigentlich oben im Brwoser folgende URL eingeben können:
www.domain.de/inhalt1.html
und anzeigen müsste er:
www.domain.de/test.php?inhalt=1

oder versteh ich da was falsch?

danke schonmal für eure Hilfe!
Frank

  1. RewriteEngine On
    RewriteRule ^inhalt(.*).html$ test.php?inhalt=$1

    a) Du hast RewriteBase vergessen.
    b) Du solltest einen Punkt auch als Punkt kennzeichnen anstatt den Platzhalter Punkt zu benutzen (".", nicht ".", vorm "html").
    c) Solltest Du wirklich Zahlen benutzen wollen, solltest Du Zahlen im Muster explizit angeben ("\d*", nicht ".*").
    d) Solltest Du Zahlen haben wollen, solltest Du Zahlen im Muster verlangen ("\d+" oder "\d{1}", nicht "\d*").
    e) Mache die Dateiendung optional, Du brauchst sie eh nicht. Denke auch an die Leute, die noch MS-DOS benutzen möchten und/oder nur dreistellige Endungen kennen ("inhalt(\d+)(.html?)?").
    f) "inhalt1.html" ist keine wirklich nette Adresse, wenn schon, dann benutze "inhalt/1" (aber das hängt natürlich vom Anwendungsfall ab und ist dementsprechend nur eine Anregung zum Aufbau "sprechender" Adressen).

    Nun müsste ich doch eigentlich oben im Brwoser folgende URL eingeben können:
    www.domain.de/inhalt1.html
    und anzeigen müsste er:
    www.domain.de/test.php?inhalt=1

    Er müsste die Seite test.php... anzeigen, ja, aber nicht die Adresse.

    oder versteh ich da was falsch?

    Keine Ahnung. Du hast ja nicht gesagt, ob bzw. was genau passiert, was Dir nicht in den Kram passt. Eine Fehlersuche ist ohne Fehler schlecht möglich.

    Gruß,
      soenk.e

    1. Danke für deine Antwort.

      Mein eigentliches Problem ist, das ich noch keinen rechten Plan habe.
      Also hab ich mir ein Tutorial genommen und es machgearbeitet.

      Ich habe auf die Namenvergabe keinen großen Wert gelegt, da es ja nur nen Test ist.

      Die Variable soll später in der Praxis keine Zahl sein...

      Und zum Fehler: Es kommt das die Seite nicht angezeigt werden kann...

      Frank

      1. Und zum Fehler: Es kommt das die Seite nicht angezeigt werden kann...

        Das Muster ist in jedem Fall korrekt: http://kino-fahrplan.de/privat/st/selfforum/inhalt1.html -> http://kino-fahrplan.de/privat/st/selfforum/test.txt.php?inhalt=1.

        Was steht im Fehlerprotokoll des Servers? Darfst Du überhaupt die .htaccess benutzen?

        Die äußerst hilfreiche Protokollierung durch mod_rewrite selbst lässt sich leider nur in der Haupt-Serverkonfiguration aktivieren. Von daher wäre es praktisch, wenn Du den Apache Dein Eigen nennen könntest.

        Gruß,
          soenk.e

        1. Ich teste es im Mom auf einem 1und1 Server, der lt Faq das ganze erlaubt...

      2. geht leider immer noch nicht.

        eingabe im Browswe: www.domain.de/inhalt/1
        Fehler: 404

        meine htaccess sieht nun so aus:

        RewriteEngine On
        RewriteBase /
        RewriteRule ^inhalt(\d+)(.html?)?$ test.php?inhalt=$1

        was ich will, ist eigentlich nur das es funktioniert, damit ich dann eine "Vorlage" habe, an der ich rumbasteln kann, um zu lernen...

        Frank

        1. geht leider immer noch nicht.

          eingabe im Browswe: www.domain.de/inhalt/1

          RewriteRule ^inhalt(\d+)(.html?)?$ test.php?inhalt=$1

          Das kann auch nicht funktionieren. Du hast in der eingegebenen Adresse einen Schrägstrich zwischen "inhalt" und Zahl, im Muster ist der Schrägstrich aber nicht vorhanden.

          Gruß,
            soenk.e

          PS: Ich bin mir nicht ganz sicher, ob es bei mod_rewrite auch der Fall ist, aber Du mußt den Schrägstrich eventuell mit einem Rückstrich maskieren. Probiere beide Varianten, "inhalt(\d+)/(.html?)?" und "inhalt(\d+)/(.html?)?".