Martin M.: mod_rewrite

hallo!

seit einigen Stunden jagt mich der Logikteufel und ich weiß nicht, wie ich weiter vorgehen soll. Am ende hab ich sogar nurnoch versucht zu raten und einen glückstreffer zu erzielen. Hat auch nicht geholfen :/ ^^

Zu der ausgangssituation: Meine index.php Datei liegt von der URL aus in einem verzeichnis und dort wiederrum in einem verzeichnis. Etwa so:

www.examplegiv.en/ordner1/ordner2/index.php

Mittels mod_rewrite möchte ich nun von diesem ordner ausgehend, ordner bzw. seite abfragen. Also:

www.examplegiv.en/ordner1/ordner2/test/ichhier (ohne dateiendung, wie ein verzeichnis)

soll ergeben $_GET['ordner'] => 'test' und $_GET['seite'] => 'ichhier', ordner1 und ordner2 sind zu ignorieren. Gleichzeitig dürfen aber auch nicht beliebig viele ordner eingeführt werden, deswegen brauche ich ein festes suchmuster mit anfang und ende.

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([-äöü\w]+)/([-äöü\w]+)/?$ /ordner1/ordner2/index.php?ordner=$1&seite=$2 [QSA]
RewriteRule ^([-äöü\w]+)/?$ /ordner1/ordner2/index.php?ordner=.&seite=$1 [QSA]
RewriteRule ^$ /ordner1/ordner2/index.php?ordner=.&seite=index [QSA]

1. Wenn eine der Bedingungen zutrifft, werden die nachfolgenden nicht mehr ausgeführt.

2. Es wird ein ordner gesucht oder eine seite, die englische zeichen, den bindestrich und äöü enthalten dürfen.

3. Ich wende dieses Suchmuster an und spreche die index Datei an. Ich habe es mal mit einem absoluten pfad gelöst.

4. Die erste Seite /ordner1/ordner2/ wo die index.php ist, funktioniert wie gewünscht. ich erhalte als GET Parameter den Ordner und die Seite "index" (3 rewrite rule)

5. Möchte ich jetzt andere seiten erstellen, nach dem muster www.examplegiv.en/ordner1/ordner2/seitenname, funktioniert es nicht mehr. Er kann die aufgeforderte seite nicht finden, obwohl sie ja in RewriteRule 2 reinpasst.

6. Ich bin verwirrt, warum er die daten nicht einfach an die index.php schickt. Also erstelle ich einen ordner namens "seitenname" und gebe da eine index.php rein

7. Die index.php von "seitenname" wird aufgerufen, wenn ich obigen link aufrufe. Ganz normal, da die RewriteCond ja nicht mehr zutrifft.

8. Ich bemerke, dass die parameter übergeben wurden, oben in der url zeile. wie gewünscht ohne ordner1 und ordner2: www.examplegiv.en/ordner1/ordner2/seitenname?ordner=.&seite=seitenname

9. Ich wunder mich, wie die dahin kommen. Im Prinzip ist es ja korrekt, nur nicht an der für mich  richtigen stelle. Ich hab doch kein R flag gesetzt, sondern die daten an die mit absoluter pfadangabe gegebene Datei index.php nach /ordner1/ordner2/ gesendet, nicht im ordner "seitenname".

Das ist hier jetzt nicht die Rateversion von mir, sondern die Version, wo es für mich am logischsten ist, dass es richtig sein müsste. Aber ich verstehe den Prozess dahinter nicht, den er dabei vornimmt und mir ein solches ergebnis liefert.

irgendwelche guten ideen? Außer pc verkaufen und politiker werden?
euer Martin

  1. Hi,

    irgendwelche guten ideen?

    RewriteLog aktivieren, und schauen was wirklich passiert.

    Btw., auf welcher Ebene hast du das konfiguriert – .htaccess, und wenn ja, wo liegt die?

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. hallo chris!

      RewriteLog aktivieren, und schauen was wirklich passiert.

      Ich kann den RewriteLog nicht aktivieren. Er gibt mir dann einen 500 Fehler zurück. Ich habe das document root verzeichnis genommen (Gelesen mit $_SERVER['DOCUMENT_ROOT']), dann weiter die ordner angegeben und eine datei namens rewrite.log. Alles in anführungszeichen gesetzt. Ich habs danach auch probiert vom ausrufenden verzeichnis auszugehen, gleicher fehler.

      Btw., auf welcher Ebene hast du das konfiguriert – .htaccess, und wenn ja, wo liegt die?

      Mit htaccess, die datei liegt direkt im ordner wo auch die index.php liegt.

      grüße,
      Martin

      1. Hi,

        Ich kann den RewriteLog nicht aktivieren. Er gibt mir dann einen 500 Fehler zurück.

        Um zu sehen, was den auslöst, gibt’s das error log …

        MfG ChrisB

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
        1. hallo chris!

          Um zu sehen, was den auslöst, gibt’s das error log …

          Gibt es auch einen ErrorLog, wenn der ErrorLog auch nicht anzeigen möchte?

          Wieder gleiches verfahren, mit document root den pfad gelesen, pfad zum ordner den ich möchte, dann dateiname.log - Auf meinem webspace funktioniert es problemlos, aber auf dem root wo ich das gerade einstellen möchte nicht. Auf meinem webspace habe ich nur kein mod_rewrite, das ist das problem, sonst hätte ich da geschaut.
          Habs schon probiert mit schreibrechte einstellen, aber nichts. selbst 777 klappt nicht.

          mfg,
          martin

  2. meldung zurück!

    inzwischen hab ichs geschafft, das zum laufen zu bringen. hab einfach den root gewechselt - und siehe da, es funktioniert :D
    Vorher war das ein managed server, von all-inkl.com und der andere selbst konfiguriert und auf dem neusten stand.

    Hat jemand eine idee, woran es liegen könnte? doch nicht an der aktualität von apache und php, denn reguläre ausdrücke gab es ja schon in dieser form lange. Ist ja schon komisch wenn er das falsch ausführt, und man dann nichtmal error und rewritelog einstellen kann... :/
    übrigends ist bei diesem Anbieter auch standardmäßig errorreporting aus, da weiß man erstmal garnicht, wieso die sachen alle nicht funktionieren. sollte man auch erst via htaccess einschalten. aber da hört es auch schon auf, was man an errors ausgeben lassen kann.

    mfg,
    Martin