toscho.design

Anker im Request abfangen

Viele Leute sind zu dumm, einen ordentlichen Crawler zu schreiben. Schade. Als Ergebnis bekomme ich dann solche Fehler ins 404-Log geschrieben:

GET /thema/suchmaschinen/%23content

Einfach ausgedrückt: Da hat jemand nicht verstanden, was ein # am Anfang eines Linkziels bedeutet.

Momentan reagiere ich noch recht gutmütig darauf mit einer kleinen Regel in der .htaccess:

RedirectMatch Permanent (.*)#.*$ $1

Sieht ein bißchen aus wie Perl-Code, daher ist eine kleine Erklärung angebracht. Die Regel besteht aus drei Teilen:

  1. RedirectMatch – die Direktive, die verwendet werden soll.
  2. (.*)#.*$ – Erfasse alle URIs, die diesem Muster entsprechen: beliebige Zeichen in beliebiger Menge – .* – plus Raute – # – plus beliebige Zeichen in beliebiger Menge.
  3. Lenke diese Anfragen auf die Zeichen um, die der erste eingeklammerte Ausdruck erfaßt hat.

In einem korrekten Request wird der Anker nicht an den Server gesendet, sondern der User-Agent merkt ihn sich einfach. Das zumindest beherrschen auch alle Browser, wenngleich der anschließend plazierte Fokus nicht immer der Norm entspricht. Google Chrome beispielsweise glänzt hier mit besonderer Inkompetenz …

Wer solche Fehler verfolgen möchte und WordPress benutzt, mag vielleicht mein Plugin T5 404 Tools ausprobieren.

3 Kommentare

  1. Thomas Hey'l am 23.03.2012 · 19:15

    Hallo Namensvetter!

    Bei der Erläuterung sollte vielleicht noch das "$"-Zeichen am Ende erklärt werden (= Ende der untersuchten Zeichenkette).

    Und Zusatztipp: Manchmal klappt das mit der Hin- und Her-Konvertierung der Hashtags nicht so richtig, sodass eventuell auch auf "%23" untersucht werden muss, dann jedoch mit dem No Escape-Flag am Ende (" [NE]").

    Beste Grüße, Thomas

  2. Thomas Scholz am 23.03.2012 · 19:26

    Ich glaube, das schließende $ kann ich mir sogar schenken.

    RedirectMatch kriegt nur die dekodierte URL zu Gesicht, insofern wäre %23 nicht glücklich, weil das dann potentiell gültige URIs erfasste. Nach meinem Verständnis gibt es hier keine Flags, zumindest sagt die Dokumentation nichts dergleichen.

  3. Thomas Hey'l am 23.03.2012 · 19:37

    Hallo Thomas!

    Die Flags kommen bei der mod_rewrite-Version zum Einsatz und sind da auch dokumentiert. Beispiel:
    RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]

    Cheers und schönes Wochendende - Thomas