Jannes: relative verzeichnis-links ohne schliessendes slash beim crawlen

Hi zusammen,

stehe vor folgender Problematik und suche nach zielführenden Impulsen:
möchte (unbekannte) relative Links zu absoluten Links wandeln, z.B. Links die sich auf der Seite http://localhost/sub1/sub2/ befinden und so aussehen:
sub3/index.html
sub3/
sub3

daraus mache ich dann:

1)  http://localhost/sub1/sub2/sub3/index.html
2)  http://localhost/sub1/sub2/sub3/
3)  http://localhost/sub1/sub2/sub3

weil ich /sub1/sub2/ als Basis hernehme.

Wenn ich jetzt die drei neuen Links abarbeiten möchte, muß ich für jeden zunächst auch eine Basis (den Pfad ohne Datei) ermitteln. Nur den Teil bis zum letzten Slash (/) zu nehmen greift nicht wirklich:

1)  /sub1/sub2/sub3/
2)  /sub1/sub2/sub3/
3)  /sub1/sub2/

Problemfall ist der 3. Pfad. Im obigen Fall wird wohl sub3 ein Verzeichnis sein, aber /sub1/sub2/dingsda kann sowohl Verzeichnis als auch Datei sein. Das es sich 'eigentlich gehört' einen abschliessenden Slash zu schreiben, wenn es keine Datei ist, ist evtl. schon veraltet, und auch wenn nicht, wird es sehr oft nicht getan.

Momentan tendiere ich dazu, immer wenn kein abschliessender Slash vorhanden ist und der Pfad nicht auf gängige Dateiendungen (.htm,.html,.shtml,.php,.cgi,.asp) endet, beide Möglichkeiten zu listen. Dann wird es zwar unter Umständen viele 404 antworten geben, aber es entwischt mir (hoffentlich) auch keiner.

Meinungen, Vorschläge hierzu?

Gruß,
Jannes

  1. Hi,

    1)  /sub1/sub2/sub3/
    2)  /sub1/sub2/sub3/
    3)  /sub1/sub2/

    Problemfall ist der 3. Pfad. Im obigen Fall wird wohl sub3 ein Verzeichnis sein, aber /sub1/sub2/dingsda kann sowohl Verzeichnis als auch Datei sein. Das es sich 'eigentlich gehört' einen abschliessenden Slash zu schreiben, wenn es keine Datei ist, ist evtl. schon veraltet, und auch wenn nicht, wird es sehr oft nicht getan.

    Dann wird der Webserver auf die Anfrage nach der Ressource mit einem Redirect auf die Version mit abschliessendem Slash senden. (Wenn er entsprechend konfiguriert ist - und das sollte er sein, denn sonst wäre die Auflösung relativer Pfadangaben für den Client ebenfalls problematisch.)

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi,

      »» Problemfall ist der 3. Pfad. Im obigen Fall wird wohl sub3 ein Verzeichnis sein, aber /sub1/sub2/dingsda kann sowohl Verzeichnis als auch Datei sein.

      Dann wird der Webserver auf die Anfrage nach der Ressource mit einem Redirect auf die Version mit abschliessendem Slash senden. (Wenn er entsprechend konfiguriert ist - und das sollte er sein, denn sonst wäre die Auflösung relativer Pfadangaben für den Client ebenfalls problematisch.)

      Ja, das macht er, er sendet ein HTTP/1.1 301 Moved Permanently und einen Location-Header in der die URL mit abschliessendem Slash drin steht.

      Das macht es jetzt auf einmal ganz leicht :)

      Danke,
      Jannes

  2. hi,

    Meinungen, Vorschläge hierzu?

    Ja. In jedem Verzeichnis sollte es eine 'index.html' geben, also eine Default-Index-Datei (kann auch anders heißen, je nach Serverkonfig./.htaccess).

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Hi,

      In jedem Verzeichnis sollte es eine 'index.html' geben, also eine Default-Index-Datei (kann auch anders heißen, je nach Serverkonfig./.htaccess).

      Und was soll das helfen?

      Der OP sprach von "unbekannten" Links, und einem "Crawler". Dieser weiss nicht, wie mein Webserver konfiguriert ist - also kann er aus der Antwort auf eine Anfrage nach einer "index.html" auch so gut wie keine brauchbaren, gültigen Schlüsse ziehen.

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.