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 ...

Guillaume
la source
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
Cylindrique
la source
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.

CK.
la source
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>
Alnitak
la source
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.

xela92
la source