Comment supprimer la protection par mot de passe .htaccess d'un sous-répertoire


97

J'ai protégé par mot de passe l'ensemble de mon site Web en utilisant .htaccessmais je voudrais exposer l'un des sous-répertoires afin qu'il puisse être consulté sans mot de passe.

Comment puis-je désactiver la protection par mot de passe htaccess pour un sous-répertoire? Plus précisément, quelle est la .htaccesssyntaxe.

Voici mon .htaccessfichier qui est placé à la racine de mon ftp.

AuthName "Administratrion du site"
AuthUserFile /dir/.htpasswd
AuthGroupFile / dev / null

AuthName sécurisé
AuthType Basic
nécessite un nom d'utilisateur1
ordre autoriser, refuser
permettre à tous

4
Cela pourrait être mieux adapté pour serverfault.
supplie le

Réponses:


154

Vous devez créer un nouveau .htaccessfichier dans le répertoire requis et y inclure la Satisfy anydirective comme ceci, jusqu'à Apache 2.3:

# allows any user to see this directory
Satisfy Any

La syntaxe a changé dans Apache 2.4, cela a le même effet:

Require all granted

7
Je ne pouvais que faire fonctionner cela Allow from allnon Satisfy Any.
Jess Telford

@JessTelford bonne utilisation de l'extrait de code. @RageZ +1 pour la réponse qui a fonctionné pour moi. Pourriez-vous modifier la réponse pour qu'elle soit très simple et la publier en utilisant la méthode d'extrait de code. Sinon, quelqu'un devra réfléchirthanks
Jesse Burcsik

2
@JessTelford Satisfy Anytravaille et il a été mal orthographié comme Satisify Any. C'est peut-être la raison pour laquelle cela n'a pas fonctionné pour vous.
BlueBird

1
J'avais besoin d'un seul fichier non protégé (tout le reste est protégé), rendu identique dans la section <Files>
Nick

Cela ne fonctionne pas pour moi - je reçois toujours le mot de passe modal demandant le nom d'utilisateur et pwd .. Utilisation de Firefox et Windows 7 ... Quelqu'un a une idée?
ItsMeDom

36

Ajoutant à la réponse de RageZ, j'ai utilisé ceci dans les directives serveur:

<Directory /var/www/protected/>
     AuthType Basic
     AuthName "Production"
     AuthUserFile /path/to/.htpasswd
     Require valid-user
</Directory>

<Directory /var/www/protected/unprotected>
     Satisfy Any
</Directory>

Impressionnant. Merci RageZ!


9

Créez simplement un nouveau .htaccessdans le sous-répertoire souhaité avec cette directive:

Allow from all

Vous pouvez restreindre votre adresse IP uniquement avec:

Allow from x.x.x.x

Voir: http://httpd.apache.org/docs/current/mod/mod_access_compat.html


Cela a fonctionné quand j'ai mis "Exiger tout accordé" au lieu de "Autoriser de tous" et "Satisfaire tout". Ces deux-là ne fonctionnaient pas pour moi. Je suis sur Apache 2.4.
endo64

1

Vous devez ajouter un autre fichier .htaccess au sous-répertoire qui remplace l'authentification. .htaccess cascades vers le haut, c'est-à-dire qu'il cherchera dans le dossier courant, puis montera d'un niveau et ainsi de suite.


4
connaissez-vous la syntaxe? Je comprends le concept mais je ne sais pas comment le mettre en œuvre.
justinl

Si vous souhaitez supprimer l'actuel et n'utiliser aucune autorisation, remplacez-le simplement par un fichier vide nommé .htaccess
Gaʀʀʏ

3
@Garry ce n'est pas ainsi que fonctionne la cascade .htaccess, vous devez explicitement remplacer les options.
William Denniss

1

Voici un moyen d'autoriser le sous-répertoire "foo" via l'authentification de base à partir du fichier .htaccess principal sur un site:

AuthType Basic
AuthName "Password Required"
AuthUserFile /dir/.htpasswd
Require expr %{REQUEST_URI} =~ m#^/foo/#
Require valid-user

Remarque: cela fonctionne dans Apache 2.4. Je n'ai pas confirmé pour les versions antérieures.


0

Si vous souhaitez empêcher toute direction spécifique de l'authentification htaccess, vous pouvez utiliser le code suivant dans votre fichier htaccess en haut.

AuthType Basic AuthName "Enter Pass" AuthUserFile /home/public_html/.htpasswd /*PATH TO YOUR .htpasswd FILE*/ Require valid-user SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow Order allow,deny Allow from env=allow

Aussi, si vous souhaitez empêcher plusieurs répertoires, ajoutez

SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow

autant de fois que de répertoires, vous souhaitez supprimer de la prévention htaccess.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.