Seite 1 von 1
Umleitungsfehler AMR bei nicht existenter Sprache
Verfasst: Fr 18. Mai 2012, 13:57
von rethus
Ich nutze Mod-rewrite (AMR). Die Sprachumschaltung funktioniert ganz gut... Es wird folgendeURL erzeugt:
- Domanname.de/1/test.html
- Domanname.de/2/test.html
- Domanname.de/3/test.html
Soweit so gut, aber wenn ich 4 eingebe (die sprache existiert nicht), erhalte ich ein Fehler über zu viele Umleitungen
Fehler 310 (net::ERR_TOO_MANY_REDIRECTS): Zu viele Umleitungen.
Wie kann ich es anstellen, dass er bei nicht existierenden Language-Id's keinen Fehler meldet, sondern einfach auf eine Ausweichseite (Startseite) umlenkt?
Re: Umleitungsfehler AMR bei nicht existenter Sprache
Verfasst: Fr 18. Mai 2012, 21:13
von xmurrix
Das Problem liegt daran, dass das AMR-Plugin zwar die Sprache erfolgreich aus der URL extrahiert, aber keine Validierung der Sprache, also Überprüfen, ob die Id der Sprache auch wirklich existiert.
Die Variable $lang wird auf den Wert 4 gesetzt. Im Frontend kann kein Artikel und keine Kategorie dazu gefunden werden und das Frontend versucht, auf die Fehlerseite umzuleiten. Allerdings enthält die URL der Fehlerseite auch die Falsche Id der Sprache, was wiederum zur einer Umleitung führt, usw...
Wenn man mit dem Namen der Sprache anstatt mit der Id arbeitet, sollte das nicht vorkommen, da das AMR-Plugin die Id der Sprache aus dem extrahierten Namen ermittelt. Eine Sprachid in der URL wird nicht gegengeprüft, sofern der Wert numerisch ist. Der Grund dafür war das Vermeiden unnötiger Datenbankabfragen. Abscheinend ist das doch nötig...
Nun zu deinem Problem:
Du kannst in der Datei "contenido/plugins/mod_rewrite/classes/class.modrewritecontroller.php" in der Funktion _setClientId() eine Validierung der Erkannten Id einbauen, um sicherzustellen, dass die Variable $lang nicht mit falscher Id gesetzt wird. Zusätzlich kannst du den Fehlerstatus auf true setzen ($this->_bError = true;).
Danach sollte es einfach möglich sein, in der "contenido/plugins/mod_rewrite/includes/front_content_controller.php" darauf zu reagieren und entsprechend umzuleiten. Allerdings musst du aber eine default Id der Sprache vor der Umleitung setzen.
Das AMR-Plugin sollte entsprechend erweitert werden. Allerdings hat hier jeder andere Wünsche uns man kann es nicht jedem Recht machen. Sehr wahrscheinlich macht es Sinn, das Plugin selber pluginfähig zu machen...