Zend Framework Proxy Bug

09. März 2010 code, technologie 0

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.