Der Fehler tritt unter anderem bei Installationen auf bei denen PHP als CGI oder FastCGI eingerichtet ist. Und zwar dann wenn man mittels mod_rewrite versucht auf eine Datei weiterzuleiten die “nicht existiert”. Bei CGI Installation von PHP bedeutet das folgendes: Wird eine URL folgendermasßen rewritten:
RewriteEngine On RewriteRule ^(.*)$ index.php/$1
Also um zum Beispiel ‘/archive/2007/01′ auf ‘index.php/archive/2007/01′ zu rewriten dann tritt der Fehler auf, weil aus der Sicht von PHP die Datei ‘/index.php/archive/2007/01′ nicht existiert.
Nachtrag
Der Fehler tritt auch dann unter einer CGI Installation auf wenn man in der php.ini die Option doc_root auf eine nicht vorhandenes oder nicht lesbares Verzeichnis gesetzt hat.
Wie kann der Fehler behoben oder umgangen werden?
In solchen Scripts wird die URL dann meist über die $_SERVER['PATH_INFO'] Variable ausgewertet.
Das sollte allerdings vermieden werden, da diese Variable nicht unter allen PHP Umgebungen gleich gesetzt wird, oder gar nicht gesetzt wird. Statt dessen sollte man die angeforderte URL über die $_SERVER['REQUEST_URI'] Variable auslesen. Ändert man die entsprechende Stellen im Script, kann man auch die RewriteRules folgendermaß ändern:
RewriteEngine On RewriteRule ^(.*)$ index.php
Wie Ihr seht wird so nicht die URL an die index.php angehängt sondern bei jedem Request nur die index.php aufgerufen. Die angeforderte URL kann aber aus der $_SERVER['REQUEST_URI'] ausgelesen werden. Ändert man diese Stellen so funktioniert der Request funktioniert und man bekommt keinen “No input file specified” Fehler zurück.









