Directive directory
<Directory [répertoire]> et </Directory> sont utilisées pour encadrer un groupe d’instructions qui vont être appliquées sur le répertoire et les sous-répertoires de ce répertoire.
On peut mettre n’importe quelle instruction tant que c’est une instruction « pour répertoire ». Dans tous les cas, [répertoire] est :
- soit le nom complet du répertoire concerné (sans le slash final) ;
- soit une expression régulière simple (que des
?,*ou[]) (je n’entrerai pas en détail ici).
Exemple :
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
AllowOverride : All|None|directive-type [directive-type] ..
On précise quelles sont les directives autorisées dans le fichier .htaccess.
Voici en fonction de ce que l’on met, le résultat :
None: Les fichiers.htaccesssont complètement ignorésAll: Toutes les directives possibles dans un contexte.htaccesssont prises en compteAuthConfig: Autorise les directives d’autorisation (!) à des utilisateurs (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, etc.).FileInfo: Autorise les directives qui controllent les types des documents (DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, et les directives du mod_mime Add* et Remove*, etc.), données méta de document (Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName), directives mod_rewrite RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule) et Action du module mod_actions.Indexes: Autorise les directives qui controllent l’indexation de répertoire (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, etc.).Limit: Autorise les directives qui controllent les accès « hôtes » (Allow, Deny et Order).Options[=Option,...]: Autorise les directives qui controllent des particularités des répertoires (Options et XBitHack).
Order : Allow,Deny / Deny,Allow
La directive Order, lorsqu’elle est accompagnée des directives Allow et Deny, sert pour un système de contrôle en 3 passes.
- On passe au travers d’une des deux directives (
AllowouDeny) - On passe ensuite l’autre directive (
DenyouAllow) - Enfin on applique la 3ème passe pour toutes les requêtes qui n’ont correspondu ni à la première ni à la seconde
Notez bien que toutes les directives Allow et Deny sont appliquées, à l’inverse d’un pare-feu où, dès qu’il y a correspondance, on s’arrête. La troisième passe aussi est appliquée. En conséquence, l’ordre dans lequel les lignes de configuration apparaissent importe peu : toutes les directives Allow sont mises en un seul groupe, et toutes les directives Deny dans un autre. Les ordres possibles sont :
Allow,Deny- Toutes les directives
Allowsont appliquées. Au moins l’une doit correspondre sinon la requête est rejetée. - Ensuite, toutes les directives
Denysont appliquées. Si l’une d’elles correspond, la requête est rejetée. - Enfin, toutes les requêtes qui ne sont validées ni par
Allowni parDenysont considérées commeDeny
- Toutes les directives
Deny,Allow- Toutes les directives
Denysont appliquées. Si l’une d’elles correspond, la requête est rejetée à moins qu’à la passe suivante, il y ait correspondance. - Toutes les directives
Allowsont appliquées. - Toutes les requêtes qui ne sont validées ni par
Allowni parDenysont considérées commeAllow
- Toutes les directives
| Validation : | Résultat sur Allow,Deny | Résultat sur Deny,Allow |
|---|---|---|
| Seul Allow valide | Requête autorisée | Requête autorisée |
| Seul Deny valide | Requête refusée | Requête refusée |
| Allow et Deny pas valides | Seconde directive appliquée = refusée | Seconde directive appliquée = autorisée |
| A la fois Allow & Deny valides | Dernier contrôle valide appliqué = refusée | Dernier contrôle valide appliqué = autorisée |
Allow from all|host|env=env-variable [host|env=env-variable] ...
La directive Allow spécifie qui peut accéder à une zone du serveur.
L’accès peut être contrôlé par nom d’hôte, adresse IP, plage d’adresses IP ou encore d’autres caractéristiques de la requête du client qui ont été capturées dans des variables d’environnement.
Le premier argument est toujours from. Les arguments suivants peuvent prendre 3 formes différentes :
- Si
Allow from allest spécifié, alors tout le monde est autorisé, dans le cadre de la directiveAllow, c’est à dire qu’il faudra prendre en compte la directiveDenyet l’ordre spécifié parOrder, mais ceci est expliqué plus haut. - Pour autoriser l’accès au serveur à des hôtes ou à des groupes d’hôtes on peut le faire en utilisant différents formats qui sont décrits en détail (en Anglais) ici.
- Le dernier format possible est celui qui se base sur les variables d’environnement. C’est aussi expliqué en détail (en Anglais) ici.
Deny from all|host|env=env-variable [host|env=env-variable] ...
La directive Deny spécifie qui peut accéder à une zone du serveur.
L’accès peut être contrôlé par nom d’hôte, adresse IP, plage d’adresses IP ou encore d’autres caractéristiques de la requête du client qui ont été capturées dans des variables d’environnement.
Les arguments sont identiques à ceux décrit pour la directive Allow.
Pour plus de détails, vous pouvez le lire en Anglais ici.
Options [+|-]option [[+|-]option] ...
La directive Option décrit quelles sont les possibilités offertes au serveur pour un répertoire donné.
Option peut être mis à :
None: dans ce cas, aucune des possibilités supplémentaires n’est activéeAll: toutes les possibilités supplémentaires sont actives saufMultiViews. C’est la configuration par défaut.ExecCGI: L’éxécution des scripts CGI (en utilisant le modulemod_cgi) est autorisée. Le serveur suivra les liens symboliques de ce répertoire. Malgré le fait que le serveur suivra les liens symboliques de ce répertoire, cela ne change pas le nom du répertoire utilisé pour appliquer les directives dans les sections<Directory>.
Notez que cette option est ignorée si elle est dans une section<Location>(mais c’est un peu hors sujet ici).Includes: les inclusions côté serveur (en utilisant le modulemod_include) sont autorisées.IncludesNOEXEC: les inclusions côté serveur (en utilisant le modulemod_include) sont autorisées, mais les commandes#execet#exec cgisont interdites.
Il est toujours possible d’inclure en utilisant#include, des scripts virtuels CGI à partir de répertoiresScriptAliased(mais c’est un peu hors sujet ici).Indexes: Si l’URL de la requête correspond à un répertoire, et qu’il n’y a aucunDirectoryIndex(par exemple ni deindex.html, ni deindex.php) dans ce répertoire, alors le modulemod_autoindexrenverra un listing formatté du répertoire.MultiViews: Les contenus negotiés"MultiViews"sont autorisés en utilisant le modulemod_negotiation.SymLinksIfOwnerMatch: Le serveur ne suivra les liens symboliques que si l’id de l’utilisateur qui possède le répertoire – ou fichier – destination est le même que celui du lien.
Notez que cette option est ignorée si elle est dans une section<Location>(mais c’est un peu hors sujet ici).
Normalement, si on applique plusieurs Options dans un répertoire, c’est la directive qui est la plus spécifique au répertoire qui est appliquée. Les autres Options sont ignorées. Les autres Options ne sont pas fusionnées.
Néanmoins, si, dans une directive Options, toutes les options qui suivent sont précédées par un signe + ou -, les deux Options sont fusionnées. Dans ce cas, n’importe quelle option précédée par un + est ajoutée aux options actives, et n’importe quelle option précédée par un – est retirée des options actives.
Regardez l’exemple (en Anglais) ici.
Notez bien encore une fois que si on ne précise pas la directive Options, la valeur All est appliquée.