По какой-то причине ни один из кода внутри
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { // When the above is set, the code that is here will execute of course }
выполняется для меня. Когда я ввожу правильное имя пользователя и пароль, снова появляется окно подсказки для авторизации. Разве оба поля не будут «установлены», если они верны, и я нажимаю клавишу ввода? Но почему-то это не так. Что я могу делать неправильно? Спасибо.
Существует «разумный способ» использовать HTTP Basic Auth в режиме CGI-mode: в использовании .htaccess
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
и в использовании PHP
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
попробуй это
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] </IfModule>
в файле .htaccess, который вам нужно будет поместить в корневой каталог
а потом
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
в начале ваших php-скриптов
Я использую Symfony 2.5.7 в PHP-PFM + Apache 2.4 под Ubuntu 14.04 и для работы BASIC_AUTH мне также необходимо правильно настроить Apache VirtualHost, добавив:
SetEnvIf Authorization "(. *)" HTTP_AUTHORIZATION = $ 1
как упоминалось здесь https://stackoverflow.com/a/17490827/435956
Попробуйте $_SERVER['REMOTE_USER']
. Это работает для меня на установке PHP 5.3 CGI + Apache.
В моем API-интерфейсе phpinfo () используется CGI / Fast CGI. Поэтому я решил проблему с написанием следующего в моем файле .htaccess RewriteEngine on RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.php [QSA,L]
Если пользователю разрешен доступ с именем пользователя / паролем, проверьте,
AuthType Digest
имеет право в вашей конфигурации VHost / Directory / .htaccess.
Это было исправлено для моего варианта использования.
На серверах моего хоста используйте $_SERVER['REDIRECT_REMOTE_USER']
вместо $_SERVER['PHP_AUTH_USER']