Htaccess не работает - всегда неправильный пароль
Я пытаюсь защитить паролем каталог и имею два файла в каталоге, которые должны защитить его паролем:
HTAccess:
###Contents of .htaccess:
AuthUserFile /var/www/html/path/to/my/directory/.htpasswd
AuthName "Protected Files"
AuthType Basic
Require user admin
Htpasswd:
###Contents of .htpasswd
admin:oxRHPuqwKiANY
Пароль также является администратором, но независимо от того, какой пароль я пытаюсь сделать, это всегда неправильно. Он сразу же запросит пароль снова!
Что не так с этой конфигурацией?
Ответы
Ответ 1
Эта проблема почти всегда, потому что apache не может прочитать файл .htpasswd. На ум приходят четыре причины:
-
он не правильно разбирает путь... как вы создали файл .htaccess? Имеет ли он окончание строк в Unix (по сравнению с использованием Notepad в Windows?
-
правильный путь? Что показывает следующая команда (с обновлением пути)?
ls -l/var/www/html/path/to/my/directory/.htpasswd
-
Доступен ли веб-сервер к файлу? chmod 644 и посмотреть, разрешает ли это проблема.
-
он не может проанализировать файл .htpasswd: в этом случае вы используете шифрование crypt(), поэтому, похоже, вы создали файл в Linux, и, вероятно, это хорошо. Некоторые типы шифрования работают только на определенных платформах, если есть сомнения, попробуйте переключиться на MD5.
Вы можете найти полезные сообщения в журнале ошибок Apache.
Мои деньги на # 3.
Ответ 2
У меня была похожая проблема с использованием MAMP, и это потому, что я создавал .htpasswd вручную. Решением было использовать команду htpasswd
в терминале:
htpasswd -bc .htpasswd someuser somepass
это создало файл .htpasswd, который отлично работал с моим файлом .htaccess, который выглядел так:
AuthType Basic
AuthName "This site is in alpha and requires a password."
AuthUserFile "/Applications/MAMP/htdocs/mywebsite/.htpasswd"
require valid-user
Ответ 3
Там небольшой шанс, что вы видите защиту паролем из родительской папки, а не папки, которую вы ожидаете.
Если ваша папка с поддержкой /etc/apache 2/sites имеет только один файл, проверьте, есть ли у нее раздел для папки ваших сайтов, например:
<Directory /var/www/mysite.com>
AllowOverride All
</Directory>
в противном случае, если у него есть файл для вашего имени сайта, например:
/etc/apache/sites-enabled/YOUR_SITE_NAME_HERE.conf
отредактируйте этот файл и убедитесь, что есть
AllowOverride All
. Это важная часть! Если вы хотите разрешить минимум, укажите:
AllowOverride AuthConfig
вместо.
Ответ 4
У меня была та же проблема. Оказалось, что проблема была в этой строке:
Требовать администратора пользователя
Если вы укажете admin
, вы можете получить доступ только к каталогу с admin
, даже если у вас есть другие пользователи в файле .htpasswd
.
Если вы хотите указать пользователей в файле .htpasswd
, вы можете изменить строку на:
Требовать действительного пользователя
Ответ 5
Моя проблема заключалась в том, что я не дал абсолютного пути для строки AuthFile.
Ответ 6
У меня была такая же проблема.
CRYPT_STD_DES - стандартный хэш на основе DES с солью из двух символов из алфавита "./0-9A-Za-z".
function standard_salt(){
$a = array_merge(range(0,9),range('a','z'),range('A','Z'));
return (string) $a[rand(0,count($a)-1)].$a[rand(0,count($a)-1)];
}
echo(crypt("admin",standard_salt()));
Пример:
admin:dsbU.we73eauE
Onlione javascript encripter также доступен.
Если он все еще не работает, позаботьтесь об этом:
- используйте unix linebreaks
- используйте правильный путь AuthUserFile, вы можете получить его, используя:
echo $_SERVER['DOCUMENT_ROOT'];
- установить файл для чтения:
chmod(".htpasswd",0644);
Ответ 7
Кроме того, убедитесь, что ваш файл паролей закодирован в ANSI.
Ответ 8
Я потратил около 2 часов, чтобы решить ту же проблему. Но проблема была в nginx.
У меня есть nginx как передний веб-сервер, и была строка для конфигурации прокси:
proxy_set_header Авторизация "";
Он отменяет поле авторизации, а apache не получает введенный пароль и пароль.
Я просто прокомментировал эту строку, и она сработала.
Ответ 9
использовать
htpasswd -b .htpasswd admin admin
использовать пароль из командной строки.