Home > Archiv > Joomla: Problem mit AceSEF und Helicon Ape

Joomla: Problem mit AceSEF und Helicon Ape

Geschrieben von   admin on    September 4, 2011

Das bereits im Zusammenhang mit Zend Framework MVC und HeliconApe beschriebene Problem tritt in ähnlicher Form auch auf, wenn man Joomla! 1.7, IIS 7, Helicon Ape von Helicon Tech und das ziemlich ausgehauene SEF-Tool AceSEF von JoomAce einsetzt: AceSEF prüft leider - nur - auf das Vorhandensein von $_SERVER['HTTP_REQUEST_URI'] - was eine Spezialität von Helicons ISAPI_rewrite ist, und ignoriert dabei, ob bereits $_SERVER['REQUEST_URI'] gesetzt ist

Damit Helicon Ape und JoomAce zusammenspielen, muss die Datei administrator/components/com_acesef/library/router.php geändert werden. Die ersten Codezeilen sehen dort so aus:

// IIS Patch
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
    $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
}

Dies ist zu ersetzen durch:

/* Private patch for problem occuring when using Helicon Ape and AceSEF */
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
    $requestUri = $_SERVER['HTTP_X_REWRITE_URL'];
} else {
    $requestUri = $_SERVER['REQUEST_URI'];
}

$requestUri = preg_replace('%^/index\.php%i', '', $requestUri);
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
    $_SERVER['HTTP_X_REWRITE_URL'] = $requestUri;
}
$_SERVER['REQUEST_URI'] = $requestUri;
unset($requestUri);
/* End of patch */


Hier wird vermutlich etwas mehr getan, als sein müsste. Allerdings hatte es sich bei Zend Framework MVC und Helicon Ape bewährt. Der Patch biegt nämlich zusätzlich die bei Helicon Ape (bisher) vermurkste Emulation für ISAPI_rewrite so hin, wie sie eigentlich sein sollte.

Trotzdem hier eine kürzere Version, die es auch tun sollte:
if (!isset($_SERVER['REQUEST_URI']) && isset($_SERVER['HTTP_X_REWRITE_URL'])) {
    $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
}

Generellere Behandlung

Wenn man sich das Problem nun noch einmal etwas genauer ansieht, dann kommt man vielleicht darauf, dass die Behandlung, die AceSEF in der genannten router.php vornimmt, eigentlich überflüssig sein müsste. Hat man nämlich den Fall, dass man ISAPI_rewrite betriebt, dann muss man ohnehin schon die index.php im Joomla!-Wurzelverzeichnis patchen. ISPAI_rewrite setzt eben gemeinerweise statt $_SERVER['REQUEST_URI'] nur die Variable $_SERVER['HTTP_X_REWRIT_URL']. Apaches mod_rewrite setzt jedoch nur $_SERVER['REQUEST_URI']. Das heißt, dass man ohnehin in /index.php den oben genannten Patch unterbringen muss. Zur Wiederholung: Helicon Ape setzt zwar $_SERVER['REQUEST_URI'] aber eben auch $_SERVER['HTTP_X_REWRITE_URL']. Und das letztere leider eben falsch!

Damit solche und ähnliche Probleme von vornherein unterbunden werden, empfehle ich, den oben gezeigten längeren Patch, und zwar zu Anfang von /index.php zu verwenden (AceSEFs router.php kann man dann unangetastet lassen). Dieser versorgt auch $_SERVER['HTTP_X_REWRITE_URL'] bei Helicon Ape mit dem korrekten (zu ISAPI_rewrite abwärtskompatiblem) Wert. Man kann auf die Idee kommen, zum Schluss des Patches (in /index.php) abschließend $_SERVER['HTTP_X_REWRITE_URL'] zu per unset(...) zu löschen. damit hätte man im Prinzip exakt die Situation, die auch bei Apaches mod_rewrite vorliegt. Allerdings sehe ich das Risiko, dass irgendein Anbieter einer Erweiterung auf andere Weise einen Rückschluss auf das Vorliegen von ISAPI_rewrite oder Helicon Ape implementiert. Um also noch etwas sicherer zu sein, dass bzgl. dieser beiden Server-Variablen kein Unglück passiert (was man in der Praxis erst nach Stunden lokalisiert - ist auch mir so gegangen), empfehle ich die obere lange Version.

Fazit

Aus eigener Erfahrung weiß ich, dass es gar nicht so schrecklich umständlich ist, z.B. Joomla! oder andere Dinge aus der PHP-Welt auf dem IIS zum Laufen zu bringen. Wenn nur nicht einige, völlig beknackte Fehler, wie die oben beschriebenen, hin und wieder auftauchen würden. An Microsoft hat's hier übrigens nicht gelegen.

Dem Support von Joomace habe ich das Problem geschildert. Es wurde mir daraufhin geschrieben, dass das Problem bis zum Erscheinen der nächsten Zwischenversion beseitigt sein wird.

Kommentare

Kommentar schreiben



(Ihre E-Mail-Adresse wird nicht angezeigt.)


Ungültiger Sicherheitscode

Bitte klicken Sie das Bild an, um einen neuen Sicherheitscode zu laden.