Anker im Request abfangen
23.03.2012 in: Browser, Markup und Webdesign • 3 Kommentare
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:
- RedirectMatch – die Direktive, die verwendet werden soll.
(.*)#.*$
– Erfasse alle URIs, die diesem Muster entsprechen: beliebige Zeichen in beliebiger Menge –.*
– plus Raute –#
– plus beliebige Zeichen in beliebiger Menge.- 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.
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
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.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