HTTP Autorisierungsscript in PHP mit und ohne CGI-mode

Ich habe ewig gesucht, warum das Autorisierungsscript, das auf vielen Hostern funktioniert, nun, als ich es auf einem anderen Server hosten wollte, auf einmal nicht mehr funktionierte.

Das Wichtigste vorweg: es lag daran, dass PHP als CGI lief.

PHP als Apache 2.0 Handler

Erst einmal das Script, wie es läuft, wenn es als Apache 2.0 Handler gehostet wird, zu erkennen in der phpinfo(); an dieser Variable:

Server API Apache 2.0 Handler

Da reicht es wenn man in die Auentifizierungsseite das eingibt:

<?php
//Benutzername und Passwort für die Authentifizierung
$benutzername = 'name';
$passwort = 'passwort';
if (
(!isset($_SERVER['PHP_AUTH_USER'])) ||
(!isset($_SERVER['PHP_AUTH_PW']))   ||
($_SERVER['PHP_AUTH_USER'] != $benutzername) ||
($_SERVER['PHP_AUTH_PW'] != $passwort)
){
// Zugangsdaten falsch, Authenfizizierungs-Header senden
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="die seite"');
exit('Tut uns leid, aber auf diese Seite koennen ' .
'Sie nur mit den richtigen Zugangsdaten zugreifen.');
}
?>

Und so läuft es mit PHP als CGI

Zu erkennen an:

Server API CGI/FastCGI 

Zuerst einmal muss in die .htaccess – Datei rein:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

und dann in das Autorisierungsscript:


<?php
//Benutzername und Passwort fuer die Autentifizierung
$benutzername = 'name';
$passwort = 'passwort';
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
if (
(!isset($_SERVER['PHP_AUTH_USER'])) ||
(!isset($_SERVER['PHP_AUTH_PW']))   ||
($_SERVER['PHP_AUTH_USER'] != $benutzername) ||
($_SERVER['PHP_AUTH_PW'] != $passwort)
){
// Zugangsdaten falsch, Authenfizizierungs-Header senden
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="die seite"');
exit('Tut uns leid, aber auf diese Seite koennen ' .
'Sie nur mit den richtigen Zugangsdaten zugreifen.');
}
?>

*schwitz* - endlich funktionierte es!


Kommentare & Trackbacks

  1. Kommentar von Michael:

    Gravatar von Michael

    Hey danke, das ist genau was ich suchte …. packe mein schweiß dazu ;-)

  2. Kommentar von Lonesome Walker:

    Gravatar von Lonesome Walker

    Aber leider nicht für FastCGI mit PHP5-FPM geeignet :-(

Kommentar schreiben

* Pflichtfelder