Mediendeponie Rotating Header Image

August, 2014:

[FIXED] Contao 3 GET-Parameter 404 not found – Holzhammermethode.

VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)

Aus der Serie “Arbeitszeitvernichtung für Fortgeschrittene” heute: Das GET-Parameter-404-Phänomen von Contao 3.

Contao 3 erlaubt die Übergabe von GET-Parametern in URLs im Verzeichnis-Style. Also z.B.:

domain.example/meinParameter/meinWert.html

Funktioniert auch ganz toll. Leider wurde in Version 3.1.3 still und heimlich verpflichtend, alle übergebenen GET-Parameter auch zwingend zu verwenden. Wer also, der sprechenden Namen wegen, etwas verwendet hat wie

domain.example/id/1234/detailAnsicht.html
statt
domain.example/id/1234.html

fällt auf die Nase – schließlich fragt er den Wert seines (unbeabsichtigt) übergebenen GET-Parameters detailAnsicht nicht ab. Pöser Pube! Statt eine verständliche Fehlermeldung auszugeben, triggert Contao in diesem Fall den 404.

Lösen lässt sich das Problem, indem überall auch wirklich alle übergeben Parameter abgefragt werden. Sinnvoll ist das Ganze ja, so wird Duplicate Content vermieden (Das war wohl auch Leos Motivation für diese krude Lösung, wie sich hier nachlesen lässt). Wo vorher also

domain.example/id/123/a.html
domain.example/id/123/b.html
domain.example/id/123/c.html

den gleichen Content unter unterschiedlichen URLs (vulgo: duplicate content) lieferten, gibt’s nun 404-Fehler. Warum hier nicht eine Lösung mittels (längst überfälligem) Routing oder zumindest mit Canonical-Tags gewählt wurde – weiß der Teufel. Die konkrete Implementierung des “Schutzes” findet ihr hier.

Es ist jetzt also angebracht, alle Module auf Vollständige Abfrage der GET-Parameter zu prüfen und zu korrigieren. Für’s schnelle Debugging und eventuellen legacy code, der nicht mehr lange überdauern soll, gibt es hier die Holzhammer-Methode, die sich prima in jeder compile()-Methode von fraglichen Modulen einbauen lässt.

// quick & dirty workaround: call all $_GET-params once, to avoid 404. (Andreas Guse 2014)
foreach ($_GET as $key => $value){
$tmp = \Input::get($key);
}
unset($tmp);

Hat Dir dieser Post geholfen? Like, share, +1, print+papierflieger, comment, … – thx.

VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)

No one even mentions my casserole!

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)

Meine Entdeckung der Woche:

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)