native: htaccess mod_rewrite

hallo, ich möchte in einer .htaccess folgendes realisieren:

ruft ein user folgende seite auf: www.mydomain.com/max.php

soll diese datei angezeigt werden: www.mydomain.com/general.php?open=max

ich habe es so versucht, aber das funktioniert nicht:

RewriteEngine on
RewriteRule ^(.*)/max.php$ http://www.mydomain.com/general.php?open=max$1 [L]

kann mir jemand sagen, was ich falsch mache?

vielen dank,
-native.

  1. Liebe Native!

    ruft ein user folgende seite auf: www.mydomain.com/max.php

    soll diese datei angezeigt werden: www.mydomain.com/general.php?open=max

    ich habe es so versucht, aber das funktioniert nicht:

    "Geht nicht" gibt's nicht. Bitte gewöhne Dir an, eine Fehler_beschreibung_ zu liefern.

    RewriteEngine on
    RewriteRule ^(.*)/max.php$ http://www.mydomain.com/general.php?open=max$1 [L]

    kann mir jemand sagen, was ich falsch mache?

    a) Wenn Deine Regel auf max.php passen soll, dann solltest Du auch max.php angeben und nicht /max.php.
    b) Möchtest Du wirklich eine externe Weiterleitung oder möchtest Du, daß max.php in der Adressleiste des Browsers stehen bleibt? In letzterem Fall solltest Du den Servernamen weglassen.
    c) Möchtest Du wirklich, daß alles, was vor /max.php steht, hinten an ?open=max angehängt wird? Falls nicht, solltest Du das "$1" weglassen.
    d) Du hast RewriteBase vergessen.
    e) Nur als Anregung: Eventuell möchtest Du statt "max.php" auch "max.html" oder gar nur "max" benutzen.

    Gruß,
      soenk.e

    1. hi, ok, hast recht, fehlerbeschreibung ist banane. "geht nicht" heißt in diesem fall, die URL wird nicht umgeschrieben, sondern es wird versucht, max.php aufzurufen, was zu einem 404 fehler führt.

      a) ok.

      b) ich hätte gerne, dass max.php in der adressleiste stehen bleibt.

      d) ?

      e) jap, nur max klingt sehr gut.

      könntest du mir noch verraten, wie ich das ganze realisiere?

      vielen dank,
      -native.

      1. die URL wird nicht umgeschrieben, sondern es wird versucht, max.php aufzurufen, was zu einem 404 fehler führt.

        Dachte ich mir, Lösung siehe a).

        a) ok.

        b) ich hätte gerne, dass max.php in der adressleiste stehen bleibt.

        d) ?

        e) jap, nur max klingt sehr gut.

        könntest du mir noch verraten, wie ich das ganze realisiere?

        Die Änderungen an Deiner Konstruktion habe ich für a) und b) eigentlich schon beschrieben, für d) hilft ein Blick in die Apache-Anleitung (http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteBase) und die Änderung zu e) sollte offensichtlich sein.

        Schau Dir auch unbedingt die Beispiele zu RewriteRule unter http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule, etwas weiter unten am Ende des Abschnitts, an. Beachte, daß hier nur die Beispiele im zweiten grauen Kasten gelten ("Inside per-directory configuration [..]"), da Du mit der .htaccess arbeitest!

        Gruß,
          soenk.e

        1. ich bekomme einen 404 error zurück:

          RewriteEngine on
          RewriteBase /homepages/28/d84149956/htdocs/worldhostelguide
          RewriteRule ^(.*)max$ general.php?open=contact [L]

          Schau Dir mal die Fehlermeldung an, dort steht sicher etwas in der Richtung

          The requested URL /homepages/28/d84149956/htdocs/worldhostelguide/general.php was not found on this server.

          Das Umschreiben hat also geklappt (statt max jetzt general.php), nur benutzt er jetzt die falsche URL, die bei genauerem Hinschauen aus den RewriteRule- und der RewriteBase-Angaben zusammengesetzt ist.

          Da das, was zuviel ist, aus RewriteBase stammt, muß dort auch der Fehler sein. Also entweder nochmal in die Anleitung schauen und feststellen, daß dort von die Rede von "URL-prefix" und nicht vom Dateisystempfad, sowie (im Beispiel) "let the server know that we were reached via /xyz and not via the physical path prefix /abc/def -> RewriteBase /xyz" ist (ich weiß, der ganze Text zu RewriteBase ist verwirrend). Oder Du nimmst gleich das, was zuviel ist, aus RewriteBase raus:

          RewriteBase /

          Nochmal zur Verständnis: Mit RewriteBase sagst Du mod_rewrite, welcher URL-Pfad dem aktuellen Verzeichnis im Dateisystem entspricht.
          In Deinem Fall greifst Du mit http://example.com/ auf das Serververzeichnis /homepages/28/d84149956/htdocs/worldhostelguide/ zu, in dem sich auch Deine .htaccess befinden. Dementsprechend lautet die RewriteBase-Angabe /.
          Würde die .htaccess sich in http://example.com/test (also /homepages/28/d84149956/htdocs/worldhostelguide/test) befinden, müsste die RewriteBase-Angabe /test lauten.

          Gruß,
            soenk.e