//
13. Mar 2008
// 1 Comment »
// Tech
Letzthin habe ich crawltrack eingesetzt um die (Google)Bots beim Spidern eines neuen Projektes zu beobachten.
Crawltrack ist in PHP geschrieben und läuft bei mir auf einem IIS 6. Da das beobachtete Projekt UrlRewriting nutzt, braucht der Crawltrack Code die vom User original aufgerufene URL und nicht die (intern) umgeschriebene.
Beim Apache / PHP gibt es dafür die Server Variable 'REQUEST_URI'.
Beim IIS / PHP beinhaltet diese aber nur den bereits umgeschriebenen Pfad.
Einige Lösungen auf Google beschreiben zwar wie man diese Variable beim IIS emulieren kann, indem man host + pfad + querystring zusammenbaut...
Das bring aber nix da hier das URLrewriting ja vor dem Aufruf der PHPengine passiert - diese bekommt dann nur den umgeschrieben Pfad. Offensichtlich hat so manch freundlicher Tip Geber in den Foren seine Hausaufgaben nicht gemacht.
Lösung: Der IIS URLRewriter (*) speichert die originale URL in 'HTTP_X_REWRITE_URL'. Und diese werten wir im PHP aus und übertragen sie in 'REQUEST_URI'. So behalten wir die volle Kompatibiltät zu vorhandenem Code.
(*) Zumindest bei den von mir verwendeten Helicon ISAPI_Rewrite und Ionics Isapi Rewrite Filter sowie nach Angabe des des [U] Unmangle Flags.
Damit das elegant und sauber implementiert werden kann, ohne die vorhandene PHP Applikation zu patchen, kann man in der PHP.ini unter 'auto_prepend_file' für jeden Request eigenen Code einbinden.
Einfach folgenden PHP Skript in der PHP.ini mit dem Schlüssel
auto_prepend_file = C:\PFAD\FIX_REQUEST_URI.php
einbinden:
<?PHP
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
?>
Und nicht vergessen das Unmangle Flag im Konfigurationsfile zu setzen:
eg: RewriteRule ^/suchmaschinenfreundlich$ /index.php?value=123 [U]