2

J'ai des fichiers accessibles au public sur mon serveur web. Je voudrais activer l'indexation automatique (options + index) mais j'aimerais demander un mot de passe pour pouvoir afficher ces listes. Je n'ai aucun problème pour configurer l'Auth, mais il y a des complications avec les fichiers publics et les fichiers DirectoryIndex. Si quelqu'un demande un répertoire et qu'il existe un fichier DirectoryIndex, il ne devrait pas avoir à entrer de mot de passe. Seul l'index automatique devrait exiger un mot de passe pour des raisons de sécurité.Mot de passe protégeant AutoIndex mais pas les fichiers statiques avec .htaccess

Voici ce que je suis venu avec:

Options +Indexes 
Options +FollowSymLinks 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_FILENAME}index.php -f 
RewriteRule ^.*$ %{REQUEST_URI}index.php [R,NE,L] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_FILENAME}index.html -f 
RewriteRule ^.*$ %{REQUEST_URI}index.html [R,NE,L] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_FILENAME}index.htm -f 
RewriteRule ^.*$ %{REQUEST_URI}index.htm [R,NE,L] 

<FilesMatch "^$"> 
AuthName "My Auth Name" 
AuthType Basic 
AuthUserFile /path/to/my/.htpasswd 
Require valid-user 
</FilesMatch> 

Le bit FilesMatch fonctionne très bien. Toute demande de répertoire est invitée à se connecter mais les fichiers normaux passent. C'est le plus facile, la partie la plus difficile est de rendre les DirectoryIndexes sans se connecter. La réécriture en haut était ma tentative ratée de rediriger la requête avant qu'elle ne demande l'autorisation, mais pas de dés, elle demande l'authentification en premier, peu importe quelle.

J'ai fait environ 6 heures de recherche à ce sujet et à ce stade, je suis sur le point d'abandonner. Toute aide serait appréciée.

Édition: voici un exemple de structure de répertoire.

/images/blah.jpg <- does not require a password 
/images/   <- requires a password to view listing 
/index.html  <- does not require a password 
/    <- does not require a password because a DirectoryIndex file exists (index.html) 

Répondre

0

enlèverait juste le bloc <FilesMatch> pour l'appliquer sur toutes les demandes et pas seulement les répertoires qui demandent.

Options +Indexes +FollowSymLinks 

RewriteEngine On 
… 

AuthName "My Auth Name" 
AuthType Basic 
AuthUserFile /path/to/my/.htpasswd 
Require valid-user 

Modifier Pourquoi ne permettent pas simplement l'indexation pour les répertoires que vous souhaitez autoriser pour?

+0

Cela ne fonctionnera pas car j'ai besoin de personnes pour pouvoir lier des fichiers sur le serveur sans avoir à taper un mot de passe. –

+0

RE edit: Le système a plusieurs milliers de répertoires, je ne serais pas en mesure de faire un .htaccess personnalisé pour chacun. –

+0

@Jason Keene: Un fichier de configuration .htaccess affecte également ses sous-répertoires. – Gumbo

0

Je sais que c'est un gravedig mais j'espère que cela pourrait aider quelqu'un à googler là-bas (comme moi - je suis tout nouveau à tout ce truc htaccess). Je voulais faire quelque chose de similaire, quoique plus simple je pense - je voulais continuer à utiliser l'autoindex Apache quand j'accède à un répertoire, mais le protéger par mot de passe (plutôt que de le désactiver complètement, pour mon propre bénéfice) - encore à en même temps, avoir des fichiers librement accessibles s'ils sont directement liés, de sorte que les gens peuvent y accéder sans avoir besoin d'un nom d'utilisateur et mot de passe.

L'astuce fondamentale « Mot de passe un répertoire » largement montré autour de l'Internet est la suivante:

AuthType Basic 
AuthName "restricted area" 
AuthUserFile /path/to/.htpasswd 
require valid-user 

Une simple addition limitant la portée de l'exiger attribut atteint ce que je cherchais:

AuthType Basic 
AuthName "restricted area" 
AuthUserFile /path/to/.htpasswd 
<Files ""> 
require valid-user 
</Files> 

Si je tente d'accéder à un répertoire sans fichier d'index (donc autoindexé), je dois entrer un nom d'utilisateur et un mot de passe.

Si j'essaie d'accéder à un répertoire avec un fichier d'index, il se charge comme d'habitude - aucune utilisation n'est requise.

Si j'essaie d'accéder à un fichier directement, il se charge comme d'habitude, comme ci-dessus, pas besoin d'u/p.

Comme probablement prévu, il a également un impact sur tous les sous-dossiers.

Semble se comporter de cette façon et fonctionne très bien sur la base de mes tests jusqu'à présent.

Questions connexes