Authentification Apache: autoriser l'accès public à un sous-répertoire


13

C'est probablement un problème simple, mais je ne trouve pas la solution dans la documentation.

Je souhaite protéger mon site Web par mot de passe à l'aide de l'authentification BASIC. Mais je veux qu'un sous-répertoire ne soit pas protégé:

http://mysite.com/ -> BASIC protected
http://mysite.com/somedir -> BASIC protected
http://mysite.com/someotherdir -> BASIC protected
http://mysite.com/public -> not protected

Je n'ai aucun problème à protéger tout le site, mais je ne sais pas comment "déprotéger" un répertoire. Le site est hébergé sur un hôte partagé, je n'ai donc accès qu'aux fichiers .htaccess pour faire la configuration.

Existe-t-il une directive pour annuler l'authentification?

Merci pour l'aide ...


Cela semble être la solution la plus correcte: stackoverflow.com/questions/2641646/…
BryanK

Réponses:


10

Cela ne devrait pas être un problème avec .htaccess, selon ce que l'hôte a autorisé.

Vous pouvez essayer de mettre un .htaccess dans le sous-dossier avec ce qui suit, bien que les remplacements devront être activés pour les répertoires dans lesquels il se trouve.

 Allow From All
 Satisfy Any

1
La sauce secrète ici, IIRC, est de mettre le .htaccess à la racine de votre site, mais d'avoir une entrée dans ce fichier .htaccess comme celle dont parle Cylindric.
Paul Lathrop

Et n'oubliez pas d'ajouter (ou assurez-vous qu'il existe) un AllowOverride pour que le .htaccess soit utilisé.
TCampbell

1
@Paul - J'ai supprimé ma réponse, mais la réponse d'AFAICR Cylindric est actuellement erronée? Un fichier .htaccess dans un sous-répertoire ne peut pas remplacer un plus haut. Cependant, le fichier .htaccess dans le répertoire parent peut également inclure des contrôles (ou même les supprimer) pour les sous-répertoires.
Alnitak

J'ai essayé à la fois de mettre une directive <Directory /> dans le dossier racine et dans le dossier que je veux rendre public, mais dans les deux cas, j'obtiens un HTTP 500. D'autres idées?
Guillaume

1
Vous ne pouvez pas utiliser <Directory> dans .htaccess, bien que vous puissiez utiliser <Files> et <Location>
Alnitak

7

OK, pour un chemin server.com/private/public:

server.com/private/.htaccess

AuthType Basic
AuthName "Private, keep out."
Require...

server.com/private/public/.htaccess

Allow From All
Satisfy Any

La clé ici est «Satisfaire à tout», ce qui OR les exigences de l'amont ensemble. «Satisfaire à tous» est la valeur par défaut.


Thx pour avoir expliqué 'Satisfy Any' 👍
Mario

1

Je crois que cela pourrait le faire:

# put the global auth stuff here
...

# put the override here
<Location /public>
Allow from All
Satisfy Any
</Location>

Ce n'est jamais une bonne idée d'utiliser des <Location> pour le contrôle d'accès. Il contrôle uniquement l'accès via un nom, plutôt que la ressource elle-même. Ainsi, tout ce qui permet d'y accéder via un nom différent (Alias, par exemple) n'a aucun contrôle d'accès qui lui est appliqué.
CK.

1
@CK En fait, vous devez utiliser Location si l'emplacement en question n'est pas un répertoire physique mais simplement un répertoire "virtuel" déguisé par quelque chose comme mod_rewrite.
Natalie Adams

0

J'ai réussi à résoudre ce problème en faisant ceci:

<Directory "/path/to/maindirectory">
[... auth stuff ... ]
</Directory>

<Directory "/path/to/mysubdirectory">
 Allow from All
 Satisfy Any
</Directory>

N'utilisez PAS les emplacements, car ils sont conçus pour respecter la casse et ils n'agissent pas sur l'accès au dossier réel, mais uniquement sur l'URL.

Ainsi, par exemple, si j'écris

http:/mywebsite/STUFF

ou

http://mywebsite/stuff

ou

http://mywebsite/StUfF

c'est différent pour le contrôle de localisation, même si le répertoire physique appelé est le même !!!

En bref, vous vérifiez l'accès au répertoire "stuff" et je peux l'écrire avec une casse différente.

De plus, l'utilisation du fichier .htaccess dans un seul répertoire avec le contrôle de l'emplacement sur d'autres n'a pas fonctionné pour moi.

J'espère que cela aide.

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.