Zend Framework Proxy Bug

Ich verwende für eine Schnittstelle das Zend Framework. Hierbei handelt es sich um ein PHP Application Framework welches einem eine sehr schöne Grundlage für MVC basierte Webseiten an die Hand gibt.

Abfragen sind dabei so aufgebaut, dass es (vereinfacht gesagt) einen Controller gibt der wiederum verschiedene Aktionen beinhaltet. Aufgerufen werden diese über die URL, zum Beispiel: http://www.schiffr.de/news/archive/. Hierbei wäre der Controller “news” und die Action “archive”.

So weit so gut. Nun trat aber das Problem auf, dass ein Kunde die Fehlermeldung

Invalid controller specified (http:)

erhielt.

Nach ein bisschen Logging und im Internet herumsuchen bin ich auf diesen Bugreport gestossen.

Auch wenn der Titel nicht so erscheint wie unser Problem liegt hier doch die Lösung:
Der Kunde verwendet einen Proxyserver für den Zugriff auf die Webseite (dies konnte ich auch im Logfile bestätigen). Hierdurch fühlt sich das Zend Framework genötigt, nicht auf die $_SERVER Variable “REQUEST_URI” sondern auf “HTTP_X_REWRITE_URL” zuzugreifen. Das Problem dabei ist, dass in der letzteren Variable noch das Protokoll und der Host, also http://www.schiffr.de, mit drin steht.
Angeblich soll dieser Bug schon mit Zend Framework 1.7.1 gefixt sein, bei mir tritt er aber selbst mit 1.10.2 noch auf.

Die Lösung des Problems:

// Datei: library/Zend/Controller/Request/Http.php
// Funktion: setRequestUri()
// ca. Zeile 431
$requestUri = preg_replace('/^https?:\/\/' . $_SERVER['HTTP_HOST'] . '/i', '', $requestUri);
$this->requestUri = $requestUri;

Hierdurch wird der Host vor der Verwendung entfernt und alles ist so, wie das Framework es erwartet. Probleme wird es natürlich bei einem Update geben, also vorsicht damit.

Mehr zu diesem Thema:
Dieser Eintrag wurde veröffentlicht in code, technologie und getagged , , , , . Bookmarken: Permanent-Link. Kommentieren oder ein Trackback hinterlassen: Trackback-URL.

Ihr Kommentar

Ihre E-Mail wird niemals veröffentlicht oder verteilt. Benötigte Felder sind mit * markiert

Connect with Facebook

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>