CGI-Programme mit Apache und Windows

Situation

Ab und an ist bin ich gezwungen, CGI-Scripts unter Windows zu schreiben bzw. zu testen, die anschließend auf einem Unix-Server laufen sollen. Einziges Problem dabei: Die Shebang-Zeile am Anfang jedes Scripts.

Unter Unix verwendet man z.B. für Perl-Scripts standardmäßig #!/usr/bin/perl, für Windows bräuchte ich aber etwas wie #!c:/programme/perl/bin/perl.exe.

Lösung

Um diese Zeile nicht in jedem Script ändern zu müssen (fehleranfällig und zeitraubend), gibt es in der Apache-Konfiguration jedoch die Direktive ScriptInterpreterSource registry-strict, wodurch der Apache unter Windows die Shebang-Direktive nicht mehr beachtet, sondern die Registry zu Rate zieht, um herauszufinden, welches Kommando mit dem Dateityp verknüpft ist.

Um aber nicht die entsprechenden Dateitypen auch bei Ausführung des CGI-Scripts mit den Standard-Anwendungen zu öffnen (bei mir z.B. mein bevorzugter Perl-Editor), pfuscht man kurz vorher noch in der Registry herum (Achtung, nicht ganz ungefährlich!):

  1. Unter HKEY_CLASSES\ROOT die entsprechende Dateiendung suchen. Dabei auf den Standard-Schlüssel achten. Wenn dieser leer ist, gleich zu Schritt 3 springen. Bei mir steht aber etwas wie "pl_auto_file" drin.
  2. Da der Standard-Schlüssel nicht leer ist, sucht man unter HKEY_CLASSES\ROOT den Inhalt des Standard-Schlüssels (bei mir z.B. "pl_auto_file". Unterhalb dieses neuen Schlüssels geht es jetzt weiter.
  3. Folgende Schlüssel anlegen, soweit sie noch nicht existieren: Shell\ExecCGI\Command.
  4. Den Standard-Wert von Command auf den absoluten Pfad des Perl-Interpreters setzen, z.B. "c:\programme\perl\bin\perl.exe".
  5. Apache neu starten.

Das funktioniert natürlich auch mit Python-Scripts und beliebigen Datei-Endungen.