Dynamische URLs, die garnicht dynamisch aussehen



  • Hallo!

    Die meisten dynamischen Webseiten haben ja einen numerischen ID-Parameter in der URL um z.B. einen bestimmten Artikel in der Datenbank eindeutig referenzieren zu können (z.B.: /article.php?id=274). Der Nachteil solcher URLs ist natürlich, dass der User sich schwer tut sie sich zu merken (und in der Tat gibt es Suchmaschinen, die solche Seiten erst garnicht in den Index aufnehmen).

    Bestimmt kennen die meisten von euch das Wikipedia Projekt. Die URLs zu einem Thema sehen typischerweise so aus:

    http://de.wikipedia.org/wiki/Physik
    http://en.wikipedia.org/wiki/Physics
    http://af.wikipedia.org/wiki/Fisika
    etc.

    Der Vorteil ist ganz klar: man weiß zu welchem Thema die URL führt (und in diesem Fall auch in welcher Sprache es ist). Wir haben hier also ein paar URLs, die eigentlich statisch wirken, aber in Wirklichkeit dynamisch sind.

    Mir sind 2 Methoden bewusst, um solche URLs möglich zu machen:

    1.) Man verwende mod_rewrite um (Wiki-ähnliche-)URLs zu klassischen, dynamischen URLs zu mappen (mit Hilfe einer externen Text-Datei). Ich kann mir aber irgendwie nicht vorstellen, dass Apache da keine Performance-Probleme kriegt, wenn die Map-Liste mehr als 10.000 Zeilen hat (wichtige Bemerkung: Meine Erfahrungen mit mod_rewrite sind minimal und nur theoretischer Natur; also kann ich mich durchaus irren).

    2.) In der Datenbank erstelle man eine Extra-Spalte in der Tabelle, wo sich die Themen befinden. Diese Spalte soll den Datentyp VARCHAR (mit sinnvoller Längenbegrenzung) und einen Index haben, damit die Themen schneller gefunden werden können. Man kann sich denken, dass der Index auf diese Spalte ein "bisschen" Speicherplatz verbrauchen wird, aber meiner Meinung nach sollte diese Methode viel effizienter als die Lösung mit mod_rewrite sein.

    Ich würde jetzt von euch gerne eure Meinungen zu beiden Lösungswegen hören. Vielleicht habt ihr Tipps oder kennt sogar noch andere Lösungswege.



  • Ich denke, du brauchst genau die Kombination aus beiden Varianten. Also per mod_rewrite die URL zuerst so umschreiben, dass ein Script damit aufgerufen wird (z.B. show.php?article=Physik) und dann kannst du in show.php mit $_GET['article'] in die DB gehen (nicht direkt natürlich - Stichwort SQL-Injections) und dir den benötigten Artikel raussuchen 🙂


  • Mod

    Ein mod_rewrite erstellt regeln und ist keine Look Up Table.

    Du willst sowieso immer das selbe script aufrufen - denn bei jedem Artikel willst du doch nicht extra eine neue php datei anlegen, oder? 😉

    In der Tabelle hast du dann den namen als index, damit das lookup so schön schnell ist. Am besten noch einen Cache davor schalten, das lohnt sich immer.

    statt mod_rewrite kannst du aber auch folgende URL verwenden:
    www.domain.de/wiki.php/Physik

    nun steht Physik im QUERY_STRING und man hat keinen mod_rewrite schritt dazwischen. Sowas ist oft eine gut Lösung wenn man kein mod_rewrite zur hand hat.


Log in to reply