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
justinl
la source
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
RageZ
la source
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!

atonyc
la source
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

Paul Rad
la source
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.

Fenton
la source
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.

PeterA
la source
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.

Mohd Jafar
la source