Paul Brunner: URL-Design

Hallo,

nein, das ist keine technische Frage zum rewrite_mode. Beim experimentieren mit selbigen bin ich aber auf folgende allgemeine Frage gestossen. Wenn ich schon meine eigenen URLs "designen" kann, wie sieht dann die ideale URL aus?

Das Original:
/index.php?doc=pfad/datei&p=arameter

Die Optionen:
/pfad/datei.html?p=arameter
/pfad/datei.html&p=arameter
/pfad/datei&p=arameter

Welche Variante ist die Beste? Gilt hier "erlaubt ist was gefällt" oder "je kürzer um so besser"? Oder gibt es irgendwelche Probleme mit Suchmaschinen, Browsern oder dem Benutzer?

Gruß
Paul

P.S.: Technischer Aspekt ist sicher auch noch wie einfach die URL im Back-end (php/xsl) zu generieren ist und wie umständlich das rewrite-pattern ist.

  1. Hallo,

    nein, das ist keine technische Frage zum rewrite_mode. Beim experimentieren mit selbigen bin ich aber auf folgende allgemeine Frage gestossen. Wenn ich schon meine eigenen URLs "designen" kann, wie sieht dann die ideale URL aus?

    Das kommt auf
    Autor, (eventuelles) CMS, Server und Vorliebe an.

    Das Original:
    /index.php?doc=pfad/datei&p=arameter

    Die Optionen:
    /pfad/datei.html?p=arameter
    /pfad/datei.html&p=arameter
    /pfad/datei&p=arameter

    ... /pfad/parameterkey1/parameter1/paramterkey2/...

    Welche Variante ist die Beste? Gilt hier "erlaubt ist was gefällt" oder "je kürzer um so besser"? Oder gibt es irgendwelche Probleme mit Suchmaschinen, Browsern oder dem Benutzer?

    Suchmaschinen, Browsern und Besuchern ist egal, was auf deinem Server passiert, wenn er "doamin.de" eingibt. Huaptsache er sieht das richtige. Dass saubere, rein virtuelle, Pfade besser aussehen als Paramter-Konstrukte ist aber logisch.

    P.S.: Technischer Aspekt ist sicher auch noch wie einfach die URL im Back-end (php/xsl) zu generieren ist und wie umständlich das rewrite-pattern ist.

    Das kriegst du schon hin... und wenn nicht fragst du halt.

    Grüße aus Barsinghausen,
    Fabian

  2. Hallo Paul,

    Die Optionen:
    /pfad/datei.html?p=arameter
    /pfad/datei.html&p=arameter
    /pfad/datei&p=arameter

    Gefallen mir alle nicht so sehr. mod_rewrite dient ja primär dazu, eine _nachvollziehbare_ Struktur in die Seite zu bringen. Nehmen wir als Beispiel SELFHTML, das hat zwar jetzt nichts mit rewrite zu tun, wohl aber mit URLs. In SELFHTML 7.0 sind alle Dateien t....htm gennant worden - und es sei denn man hatte ein sehr gutes Gedächtnis, wußte man nicht, welche Datei jetzt was verbirgt. Ich kenne dagegen inzwischen sehr viele URLs in SELFHTML auswendig, weil mit SELFHTML 8 die Struktur nachvollziehbar geworden ist.

    Normalerweise sollte man, wenn man auf eine logsiche Struktur aus ist, URL-Parameter möglichst vermeiden, allerdings auch nicht verteufeln. Ich persönlich kann jetzt nicht so einfach pauschal sagen, wie ich so etwas realisieren würde ohne dass Du etwas konkreter wirst.

    Ich würde auf jeden Fall datei.html&... oder datei&... vermeiden; Parameter werden im Normalfall mit "?" angehängt und das sollte auch so bleiben.

    Achja, Suchmaschinen ist es übrigens egal, ob die Datei jetzt 01224267801234.html oder html/allgemein/grundgeruest.htm heißt. Das einzige, woran sich Suchmaschinen u.U. stoßen, sind URL-Parameter.

    P.S.: Technischer Aspekt ist sicher auch noch wie einfach die URL im Back-end (php/xsl) zu generieren ist und wie umständlich das rewrite-pattern ist.

    Ich würde das technische erst einmal in den Hintergrund stellen - falls sich eine Lösung hinterher als nicht praktikabel erweist, kann man immer noch eine andere suchen.

    Viele Grüße,
    Christian

    --
    Glaube niemals dem Gelabber der Forums-Antworten. Das sind doch Minderheiten-Diskriminierer, Sexisten, Psychisch Kranke und Depressive.
    Ja auch Rassisten und ähnliche Sozialrowdies befinden sich da drunter. - </archiv/2003/8/54855/#m305505>
    1. Hallo Christian,

      Normalerweise sollte man, wenn man auf eine logsiche Struktur aus ist, URL-Parameter möglichst vermeiden, allerdings auch nicht verteufeln. Ich persönlich kann jetzt nicht so einfach pauschal sagen, wie ich so etwas realisieren würde ohne dass Du etwas konkreter wirst.

      Hauptgrund für die Umstellung sind die Suchmaschinen (Parameter-Problem) und das logfile. Sprechende URLs für den Benutzer würde ich aber auf jeden Fall auch gerne noch mit reinpacken.

      Konkret sehen die meisten URLs im Moment so aus:
      /index.php?doc=angebot/2003/segeln

      Die Struktur des doc-Parameters ist also logisch und selbstsprechend. Ideal für die Variante: /angebot/2003/segeln.html. Und auch einfach zu realsieren.

      Einigen wenigen Links hängen aber noch ein oder mehrer Zusatzparameter an. Meist haben die nichts mit der eigentlichen Seitestruktur zu tun sondern übergeben Zusatzinformationen wie Filtereinstellung oder Vorselektion.

      Beispiel:
      /index.php?doc=kontakt
      /index.php?doc=kontakt&name=otto

      Der erste Aufruf zeigt ein Kontaktformular mit pulldown-Menu um den gewünschten Ansprechpartner auszuwählen, im zweiten Aufruf ist Otto im Menu schon vorausgewählt.

      Das verdrahten in der Verzeichnisstruktur macht also keinen Sinn. Suchmaschinen/logfile-Nachteile sind akzeptabel, da der parameterlose Seiteaufruf trotzdem indiziert und geloggt werden würde. Also mussen die Parameter irgendwie anders angehängt werden und das könnte bei 0-n Parametern schon ein bischen tricky werden.

      Ich würde auf jeden Fall datei.html&... oder datei&... vermeiden; Parameter werden im Normalfall mit "?" angehängt und das sollte auch so bleiben.

      Verstosse ich mit der &-Variante gegen irgendwelche Standards? Wenn die Suchmaschinen Parameter am ? erkenne ist & doch eine Möglichkeit die Parameter doch in den Index zu bringen.

      Gruß
      Paul

      1. Hallo Paul,

        [...]
        Die Struktur des doc-Parameters ist also logisch und selbstsprechend. Ideal für die Variante: /angebot/2003/segeln.html. Und auch einfach zu realsieren.

        Soweit bin ich fast einverstanden; allerdings kannst Du die Endung auch weglassen, wenn Du schon mod_rewrite verwendest.

        Einigen wenigen Links hängen aber noch ein oder mehrer Zusatzparameter an. Meist haben die nichts mit der eigentlichen Seitestruktur zu tun sondern übergeben Zusatzinformationen wie Filtereinstellung oder Vorselektion.

        Hier stellt sich natürlich die Frage, ob solche "Zusatzinformationen" überhaupt indiziert werden sollen.

        Das verdrahten in der Verzeichnisstruktur macht also keinen Sinn.

        Da gebe ich Dir Recht.

        Suchmaschinen/logfile-Nachteile sind akzeptabel, da der parameterlose Seiteaufruf trotzdem indiziert und geloggt werden würde.

        Ich verstehe nicht ganz: Was spricht gegen

        /kontakt?name=otto   ->    index.php?doc=/kontakt&name=otto

        ? Das lässt sich per mod_rewrite sehr leicht realisieren. (RewriteBase /, RewriteCond %{REQUEST_URI} !^/index.php, RewriteRule ^.* index.php?doc=$1 [L,QSA])

        Verstosse ich mit der &-Variante gegen irgendwelche Standards?

        Gegen Standards: AFAIK Nein. Gegen Konventionen: ja. Und Du machst Dir das Leben unnötig kompliziert, weil Du den String dann selbst parsen müsstest; bei meiner Lösung oben macht das PHP für Dich automatisch...

        Wenn die Suchmaschinen Parameter am ? erkenne ist & doch eine Möglichkeit die Parameter doch in den Index zu bringen.

        Klar. Allerdings stellt sich die Frage, ob es sinnvoll ist, Parameter in den Index bringen zu wollen. Oder anders gesehen: Wenn man es in einem speziellen Fall im Index braucht, ist es dann sinnvoll, Parameter zu verwenden?

        Viele Grüße,
        Christian

        --
        Glaube niemals dem Gelabber der Forums-Antworten. Das sind doch Minderheiten-Diskriminierer, Sexisten, Psychisch Kranke und Depressive.
        Ja auch Rassisten und ähnliche Sozialrowdies befinden sich da drunter. - </archiv/2003/8/54855/#m305505>
        1. Hallo Christian,

          Soweit bin ich fast einverstanden; allerdings kannst Du die Endung auch weglassen, [...].

          Gute Idee, vereinfacht das Generieren der URLs erheblich.

          Einigen wenigen Links hängen aber noch ein oder mehrer Zusatzparameter an. [...]

          Hier stellt sich natürlich die Frage, ob solche "Zusatzinformationen" überhaupt indiziert werden sollen.

          Eigentlich nicht.

          Ich verstehe nicht ganz: Was spricht gegen
          /kontakt?name=otto   ->    index.php?doc=/kontakt&name=otto

          OK, das wäre: kontakt?name=otto  ->  index.php?doc=kontakt&name=otto

          ? Das lässt sich per mod_rewrite sehr leicht realisieren. (RewriteBase /, RewriteCond %{REQUEST_URI} !^/index.php, RewriteRule ^.* index.php?doc=$1 [L,QSA])

          Wenn ich mich nicht täusche liefert dieser rewrite aber:
          kontakt?name=otto   ->   index.php?doc=kontakt?name=otto

          ...und das macht glaube ich beim parsen Schwierigkeiten. Also entweder ich wandle das zweite "?" in ein "&" (wüsste im Moment aber nicht wie) oder da steht von vorne herein schon ein "&": kontakt&name=otto.

          Gegen Standards: AFAIK Nein. Gegen Konventionen: ja. Und Du machst Dir das Leben unnötig kompliziert, weil Du den String dann selbst parsen müsstest; bei meiner Lösung oben macht das PHP für Dich automatisch...

          Das verstößt zwar gegen eine Konvention, hält aber das rewrite schön einfach und gibt keine Parser-Probleme.

          Gruß
          Paul

          1. Moin!

            Das verstößt zwar gegen eine Konvention, hält aber das rewrite schön einfach und gibt keine Parser-Probleme.

            Eine URL ist so definiert, dass der Parameter mit einem Fragezeichen abgetrennt wird. Du hast einen Parameter in der URL, trenne ihn also mit Fragezeichen ab.

            ? Das lässt sich per mod_rewrite sehr leicht realisieren. (RewriteBase /, RewriteCond %{REQUEST_URI} !^/index.php, RewriteRule ^.* index.php?doc=$1 [L,QSA])

            Wenn ich mich nicht täusche liefert dieser rewrite aber:
            kontakt?name=otto   ->   index.php?doc=kontakt?name=otto

            Dann ändere eben die RewriteRule:

            ^/([^?]*)?{0,1}(.*){0,1}$ index.php?doc=$1&$2 - oder so ähnlich.

            Es gibt jedenfalls keinen Grund, wegen Faulheit im Umgang mit regulären Ausdrücken deswegen die URLs "passend" zu gestalten. :) Du kannst praktisch jeden Baustein deiner URL auseinandernehmen und neu zusammensetzen.

            - Sven Rautenberg

            --
            SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
            ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
            1. Hallo,

              Dann ändere eben die RewriteRule:
              ^/([^?]*)?{0,1}(.*){0,1}$ index.php?doc=$1&$2 - oder so ähnlich.

              [...] Du kannst praktisch jeden Baustein deiner URL auseinandernehmen und neu zusammensetzen.

              OK, ich bin kein Experte für reguläre Ausdrücke sondern eher ein "Feld-Wald-und-Wiesen"-Anwender.

              Das Auseinandernehmen ist auch für mich kein Problem. Beim zusammensetzten ist der "$2"-Teil aber optional und entsprechend sollte - wenn nicht vorhanden - auch kein "&" am Ende stehen bleiben (ist ja schließlich Konvention ;-). Wie lässt sich das realisieren?

              Gruß
              Paul

          2. Hallo Paul,

            RewriteRule ^.* index.php?doc=$1 [L,QSA]

            Wenn ich mich nicht täusche liefert dieser rewrite aber:
            kontakt?name=otto   ->   index.php?doc=kontakt?name=otto

            Nein. Ein

            RewriteRule ^.*  index.php?doc=$1

            liefert bei kontakt?name=otto   ->  index.php?doc=kontakt

            Mehr nicht. Der Query-String wird einfach ignoriert. Ein

            RewriteRule ^.* index.php?doc=$1   [QSA]

            liefert dagegen bei kontakt?name=otto -> index.php?doc=kontakt&name=otto

            automatisch mit & statt ?. Dagegen würde ein

            RewriteRule ^.*   index.php   [QSA]

            bei kontakt?name=otto     index.php?name=otto

            liefern.

            ...und das macht glaube ich beim parsen Schwierigkeiten. Also entweder ich wandle das zweite "?" in ein "&" (wüsste im Moment aber nicht wie) oder da steht von vorne herein schon ein "&": kontakt&name=otto.

            Der Apache denkt mehr mit, als Du es Dir vorstellen kannst. :-)

            Viele Grüße,
            Christian

            --
            Glaube niemals dem Gelabber der Forums-Antworten. Das sind doch Minderheiten-Diskriminierer, Sexisten, Psychisch Kranke und Depressive.
            Ja auch Rassisten und ähnliche Sozialrowdies befinden sich da drunter. - </archiv/2003/8/54855/#m305505>
            1. Hallo Christian,

              Der Apache denkt mehr mit, als Du es Dir vorstellen kannst. :-)

              Aha, "Geheimcode" [QSA], hört sich gut an.

              Danke
              Paul