Url-Rewriting, PHP und IIS

// 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]

1 Response to “Url-Rewriting, PHP und IIS”

  1. rezept zum url rewriting unter iis

    den auto_prepend_file tipp habe ich von hier

Add comment


  1. (Will show your Gravatar icon)

  2. Loading