bonehunter: mod_rewrite mit php nachbauen?

Hallo,

leider unterstützt mein Provider kein mod_rewrite. Angeblich wegen Sicherheitsmängel.

Meine Seite besteht zu einem großen Anteil aus dynamisch generierten Seiten, wobei ich parameter zur Navigation verwende. Z.B. Gästebuch, Bildergalerien, Forum,...

Ich würde gerne meine Seiten dahingehend optimieren, dass sie von Suchmaschienen ohne Probleme indexiert werden.  Meines Wissens haben die bei Seiten wie "gaestebuch.php?seite=1" ihre Probleme. Mit mod_rewrite wäre ja sowas wie "gaestebuch_seite_1.php" kein Problem. Aber leider habe ich das ja nicht zur Verfügung.

Ich würde sowas also gerne mit PHP irgendwie nachbauen. Ist das ohne Probleme möglich? Hatte bis jetzt noch nicht den Gedankenblitz wie man das realisieren könnte. Würde mich über eure Hilfe freuen.

mfg bonehunter

  1. hi!

    ich glaube nein. du kannst zwar den "REQUEST_URI" abfragen,dazu müßtest du aber ein script aufrufen, das dann aufgrund des REQUEST_URI den uri umschreibt. nur, welches script soll das sein, wenn du vorher den uri verfälschen tust?

    ciao, stefan

    p.s.: hat dein provider eigene 404-seiten erlaubt? in die könntest du dieses script einbauen ;-)

    1. Hi Stefan,

      p.s.: hat dein provider eigene 404-seiten erlaubt? in die könntest du dieses script einbauen ;-)

      Ja hat er erlaubt, aber die Lösung ist irgendwie nicht so wie ich mir das vorgestellt hab ;-) Dann lass ich es liber. Deine Argumentation leuchtet mir schon ein, warum es nicht geht. Schade.

      Danke.

      mfg bonehunter

      1. naja, gehen würde es schon. du forderst ja seiten an, die es nicht gibt. also wird auf die eigene 404er (php) gelenkt. die hat nun den request_uri. den baust du um in den tatsächlichen uri und leitest wiederum weiter. nachteil: der uri wird nicht tatsächlich umgeschrieben (so wie es mod_rewrite tut). in der uri-anzeige d. browsers wird nun (im gg.satz zu mod_rewrite) der echte uri angezeigt. ist also keine wirklich praktikable lösung :-(

        1. Hallo!

          naja, gehen würde es schon. du forderst ja seiten an, die es nicht gibt. also wird auf die eigene 404er (php) gelenkt. die hat nun den request_uri. den baust du um in den tatsächlichen uri und leitest wiederum weiter. nachteil: der uri wird nicht tatsächlich umgeschrieben (so wie es mod_rewrite tut). in der uri-anzeige d. browsers wird nun (im gg.satz zu mod_rewrite) der echte uri angezeigt. ist also keine wirklich praktikable lösung :-(

          Mit include ließe sich aber auch das verhindern. Anstatt auf die entsprechende Datei weiterzuleiten, wird sie einfach 'includiert'.

          Schöne Grüße,

          Johannes

          --
          Der folgende Satz ist wahr.         | http://www.zeller-johannes.de/
          Der vorhergehende Satz ist gelogen. |
          ss:| zu:} ls:[ fo:} de:] va:} ch:) sh:( n4:| rl:( br:< js:| ie:{ fl:( mo:}
  2. Hallo,

    Ich würde sowas also gerne mit PHP irgendwie nachbauen. Ist das ohne Probleme möglich? Hatte bis jetzt noch nicht den Gedankenblitz wie man das realisieren könnte. Würde mich über eure Hilfe freuen.

    Du kannst ja mal ausprobieren, ob folgendes bei Dir klappt (auf dem von mir benutzten Server geht es):

    Lege in Dein Hautverzeichnis die Datei gaestbuch.php [*]. Wenn jetzt beim Server nach der Seite http://example.com/gaestebuch.php/seite/1/ gefragt wird (und die Verzeichnisse gaestebuch.php/, seite/ und 1/ nicht existieren, aber die Datei gaestebuch.php), dann gibt zumindest "mein" Server nicht sofort eine Fehlermeldung aus, sondern sucht eine Ebene hoeher nach einer existierenden Datei/Verzeichnis, also nach http://example.com/gaestebuch.php/seite/. Da diese Datei/Verzeichnis ebenfalls nicht existiert, geht's nochmal eine Ebene hoeher. Die Datei http://example.com/gaestebuch.php existiert aber und wird schliesslich aufgerufen [**].

    In dem Skript gaestebuch.php kannst Du dann mittels $_SERVER['PATH_INFO'] rausbekommen, wie die urspruengliche Anfrage lautete. Daraus koenntest Du dann Deine Variablen extrahieren.

    Ich finde leider gerade keine Referenzen zu diesem Apache-Verhalten und kann auch nicht sagen, wie man das genau bezeichnet. Allerdings hoffe ich, dass Dir diese Info trotzdem ein wenig hilft.

    Grüße, Alex.

    [*] aus Schoenheitsgruenden kannst Du die Datei auch einfach nur "gaestebuch" nennen und in der .htaccess mit
     <Files gaestebuch>
     ForceType application/x-httpd-php
     </Files>
    erreichen, dass sie trotzdem als php-Datei geparst wird.

    [**] Du musst darauf aufpassen, dass bei dieser Methode in der Seite gaestebuch.php Links und Bilder an "falsche" Adressen zeigen koennen -- evtl. hilft dagegen eine absolute Adressangabe bei src= und href= .

    1. Hi,

      Du kannst ja mal ausprobieren, ob folgendes bei Dir klappt (auf dem von mir benutzten Server geht es):

      (prust) :-))

      So habe ich früher, in Vor-mod_rewrite-Zeiten und als die Suchmaschinen noch mehr Probleme mit dem "?" hatten, meine On-the-fly-Seiten als statisch "getarnt".

      Also z.B. http://www.bekleidung.de/katalog/lederjacke_45_rot.htm, mit "katalog" als CGI und dem Rest als Parameter ("katalog" würde hier also alle Lederjacken in Größe 45 und roter Farbe ausgeben). Den Suchmaschinen war's genehm, und zusätzlich konnte man leicht einen wirklich statischen Auftritt auf CD-ROM für Offline-Präsentationen/Kunden/... brennen.

      Dafür braucht's aber auch ein gescheites Betriebssystem - also Unix, nicht Windows! >:-> Jedenfalls kam Windows NT mit dem IIS damit nicht klar (vielleicht hat sich das aber mittlerweile geändert).

      Hätte nicht gedacht, daß andere auch noch auf so krude Ideen kommen (falls Du selbst drauf gekomen bist ;-)) ...

      Ich finde leider gerade keine Referenzen zu diesem Apache-Verhalten und kann auch nicht sagen, wie man das genau bezeichnet.

      Als ich mich damals in die CGI-Programmierung eingearbeitet habe, bin ich über PATH_INFO gestolpert und dachte, *das* könnte man für so was brauchen. Uch glaube nicht, daß es dafür einen speziellen Namen gibt - jedenfalls ist mir bislang auch keiner untergekommen. :-)

      Aber genug von den "Geschichten aus dem Krieg" ... ;-)

      Gruß, Cybaer

      PS: Bist Du sicher, daß der Server/das Betriebssystem das "von oben" abarbeitet? Ich hätte eher gedacht, daß Unix (nicht der Apache!)schon "stoppt", wenn das vermeintliche Unterverzeichnis eine Datei ist. Die wird dann eben ausgeführt ...

      1. hi,

        PS: Bist Du sicher, daß der Server/das Betriebssystem das "von oben" abarbeitet? Ich hätte eher gedacht, daß Unix (nicht der Apache!)schon "stoppt", wenn das vermeintliche Unterverzeichnis eine Datei ist. Die wird dann eben ausgeführt ...

        erscheint mir auch logischer.

        gruss,
        wahsaga

      2. Hallo Cybaer,

        Dafür braucht's aber auch ein gescheites Betriebssystem - also Unix, nicht Windows! >:-> Jedenfalls kam Windows NT mit dem IIS damit nicht klar (vielleicht hat sich das aber mittlerweile geändert).

        In der Quelle (s. u.), die ich jetzt auf meinem anderen Rechner gefunden habe, steht, es wäre ein Apache-Feature.

        Hätte nicht gedacht, daß andere auch noch auf so krude Ideen kommen (falls Du selbst drauf gekomen bist ;-)) ...

        Nein, ich war mal zufällig auf eine Seite wie diese gestoßen:
        http://www.devarticles.com/c/a/Apache/Using-ForceType-For-Nicer-Page-URLs (wobei die relevanten Dinge auf Seite 3 stehen).

        Als ich mich damals in die CGI-Programmierung eingearbeitet habe, bin ich über PATH_INFO gestolpert und dachte, *das* könnte man für so was brauchen. Uch glaube nicht, daß es dafür einen speziellen Namen gibt - jedenfalls ist mir bislang auch keiner untergekommen. :-)

        In der o. g. Referenz wird das ganze als "URL look back" bezeichnet. Aber da ich nicht mal weiß, wie seriös die Quelle ist, kann ich noch weniger über die Qualität des Namens sagen.

        PS: Bist Du sicher, daß der Server/das Betriebssystem das "von oben" abarbeitet? Ich hätte eher gedacht, daß Unix (nicht der Apache!)schon "stoppt", wenn das vermeintliche Unterverzeichnis eine Datei ist. Die wird dann eben ausgeführt ...

        In besagtem Artikel steht halt, es wäre Apache und der arbeite "von oben". Aber nochmals: ich habe keine Ahnung über die Qualität des Artikels (außer, dass das Beschriebene auf Apache/Unix funktioniert). Dein Gedankengang klingt jedenfalls auch sehr logisch.

        Grüße, Alex.

        1. Hi,

          In der Quelle (s. u.), die ich jetzt auf meinem anderen Rechner gefunden habe, steht, es wäre ein Apache-Feature.

          Oh je. Ich weiß nur noch, daß, als ich es damals erstmals gemacht habe, das OS FreeBSD war. Ob der Server aber überhaupt ein Apache war, ist mir nicht mehr in Erinnerung - ist ungefähr 9 Jahre her ... =:-)

          Nein, ich war mal zufällig auf eine Seite wie diese gestoßen:
          http://www.devarticles.com/c/a/Apache/Using-ForceType-For-Nicer-Page-URLs (wobei die relevanten Dinge auf Seite 3 stehen).

          Ah, besten Dank. :-)

          In besagtem Artikel steht halt, es wäre Apache und der arbeite "von oben". Aber nochmals: ich habe keine Ahnung über die Qualität des Artikels (außer, dass das Beschriebene auf Apache/Unix funktioniert).

          Wenn es eine Servereigenschaft wäre, dann müßte es ja auch auf Apache/Windows funktionieren. Muß ich mal bei Gelegenheit ausprobieren ...

          Gruß, Cybaer