htaccess ne fonctionne pas toujours mauvais mot de passe
j'essaie de protéger par mot de passe un répertoire, et j'ai deux fichiers dans le répertoire qui devraient le protéger par mot de passe:
- .htaccess
- .htpasswd
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
le mot de passe est aussi admin, mais quel que soit le mot de passe que j'essaie, il est toujours erroné. Il demande immédiatement le mot de passe à nouveau!
Qu'est-ce qui ne va pas avec cette configuration?
8 réponses
ce problème est presque toujours dû au fait qu'apache ne peut pas lire le .un fichier htpasswd. Il y a quatre causes qui viennent à l'esprit:
il n'analyse pas le chemin correctement... comment avez-vous créé le .fichier htaccess? Est-ce qu'il a des fins de ligne unix (par opposition à say en utilisant Notepad dans Windows)?
le chemin est-il correct? Que montre la commande suivante (avec le path update)? ls-l /var/www/html/chemin/vers/mon/répertoire/.htpasswd
le serveur web avoir accès au dossier? chmod 644 et voir si cela résout le problème.
il ne peut pas l'analyser .fichier htpasswd: dans ce cas, vous utilisez le cryptage crypt() donc il semble que vous avez créé le fichier sur Linux et il est probablement très bien. Certains types de cryptage ne fonctionnent que sur certaines plateformes, en cas de doute, essayez de passer à MD5.
Vous pouvez trouver messages utiles dans le journal des erreurs Apache.
Mon argent est sur la #3.
j'ai eu un problème similaire en utilisant MAMP et c'était parce que je créais .htpasswd par la main. La Solution était d'utiliser htpasswd
commande dans le terminal:
htpasswd -bc .htpasswd someuser somepass
cela a créé l' .htpasswd fichier qui a bien fonctionné avec mon .fichier htaccess qui ressemblait à de la sorte:
AuthType Basic
AuthName "This site is in alpha and requires a password."
AuthUserFile "/Applications/MAMP/htdocs/mywebsite/.htpasswd"
require valid-user
il y a une petite chance que vous voyez la protection de mot de passe d'un dossier parent, pas le dossier que vous attendez.
si votre dossier/etc/apache2 / sites-enabled ne contient qu'un seul fichier, vérifiez s'il contient une section pour votre dossier sites, quelque chose comme:
<Directory /var/www/mysite.com>
AllowOverride All
</Directory>
sinon, s'il y a un fichier pour le nom de votre site, comme:
/etc/apache/sites-enabled/YOUR_SITE_NAME_HERE.conf
éditez ce fichier à la place, et assurez-vous qu'il y a un
AllowOverride All
là. C'est l' partie importante! Si vous voulez seulement de permettre au minimum, préciser:
AllowOverride AuthConfig
à la place.
j'ai eu le même problème. Il s'est avéré que le problème était cette ligne:
Besoin de l'utilisateur admin
Si vous spécifiez admin
vous ne pouvez accéder à l'annuaire admin
même si vous avez d'autres utilisateurs dans le .htpasswd
fichier.
Si vous souhaitez spécifier les utilisateurs dans le .htpasswd
le fichier, vous pouvez modifier la ligne:
Require valid-user
mon problème est que je n'ai pas donné un chemin absolu pour la ligne AuthFile.
j'ai eu le même problème.
- Le mot de passe doit contenir indiqué de cryptage:
CRYPT_STD_DES - DES Standard de hachage avec un salt de deux caractères de l'alphabet "./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()));
exemple:
admin:dsbU.we73eauE
onlione javascript encripter est également disponible.
Si ça ne fonctionne toujours pas, prenez soin de ces éléments:
- utiliser unix mais les sauts de ligne
- utiliser le chemin AuthUserFile correct, vous pouvez l'obtenir en utilisant:
echo $_SERVER['DOCUMENT_ROOT'];
- définir fichier lisible:
chmod(".htpasswd",0644);
assurez-vous également que votre fichier mot de passe est encodé ANSI.
j'ai passé environ 2 heures pour résoudre le même problème. Mais le problème était à nginx. J'ai nginx en tant que front de du serveur web et il y avait une ligne pour la configuration de proxy:
proxy_set_header Autorisation "";
il l'emporte sur le champ D'autorisation et apache ne reçoit pas de login ni de mot de passe.
je viens de commenter cette ligne et ça a marché.