На нашем Linux-хостинге PHP-скрипты работают как CGI-скрипты. Поэтому в серверных переменных PHP не передается значение REMOTE_USER.
Чтобы корректно настроить HTTP-авторизацию в PHP, необходимо указать верные параметры в скрипте и файле .htaccess. Рассмотрим это на конкретном примере. У нас есть неработающий скрипт, в котором нужно исправить настройки:
<?php if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Text to send if user hits Cancel button'; exit; } else { echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; } ?>
Чтобы скрипт заработал, в файл .htaccess нужно внести следующие изменения:
AuthType Basic AuthUserFile /usr/local/pem/vhosts/100000/webspace/.htpasswd AuthName "TEST" require valid-user
<IfModule mod_rewrite.c> RewriteEngine on SetEnvIfNoCase Authorization "Basic ([a-z0-9=]+)" QUERY_STRING=$1 </IfModule>
Также необходимо внести изменения в сам скрипт:
?php // split user/pass parts if (isset($_SERVER["REDIRECT_QUERY_STRING"]) && $_SERVER["REDIRECT_QUERY_STRING"]!='') { $d = base64_decode($_SERVER["REDIRECT_QUERY_STRING"]); list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', $d); } // open user/pass prompt if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="Your Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Text to send if Cancel button is used'; exit; } else { echo "<p>Greetings: </p>".$_SERVER['PHP_AUTH_USER']; echo "<p>Password you entered: </p>".$_SERVER['PHP_AUTH_PW']; } phpinfo(); ?>
После этого HTTP-авторизация будет работать корректно.
|