HTTP Authentication с PHP как FastCGI/SuExec
10 июня 2011
Однако, есть обходной путь, который покажет как сделать HTTP-авторизацию для PHP так-же как и для CGI.
Если скрипт постоянно выдает форму ввода лоина и пароля при HTTP авторизации, то либо Вы не правильно вводите логин и пароль, либо ваш PHP установлен и работает как FastCGI. Но решение есть.
Первое, что надо сделать это создать .htaccess в папке к которой хотим запретить доступ:
1 2 |
RewriteEngine on RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] |
Он переназначает пару логин/пароль в переменную HTTP_AUTHORIZATION
В php скрипте должно быть следующее:
1 |
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); |
А вот на что будет похож наш файл с авторизацией:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// split the user/pass parts list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); // open a user/pass prompt 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 "Hello, ".$_SERVER['PHP_AUTH_USER']; echo "You entered as your password: ".$_SERVER['PHP_AUTH_PW']; } |
Вот и вся хитрость. Пользуйтесь на здоровье.
Leave a Reply