Apache la directive AllowOverride

Surchargez vos réglages avec htaccess

Lorsqu’un site web utilise un fichier .htaccess on voit cette directive (Donc cette directive n’est pas à utiliser dans le fichier htaccess qu’on soit d’accord !). Vous allez voir que le fichier htaccess n’est rien d’autre qu’une configuration d’Apache sans redémarrage du serveur. En effet dès qu’httpd.conf est modifié il faut recharger ou redémarrer Apache pour appliquer les modifications.

Attention : AllowOverride ne peut être utilisé que dans une section <Directory>

Directives impactées par AllowOverride

AllowOverride va dire ce que le fichier htaccess peut réécrire pour surcharger les directives plus générales dans le fichier httpd.conf. Il y a cependant un  nombre limité de directives qui peuvent être surchargées. Les classes de directives sensibles à la surcharge sont :

  1. Indexes
  2. Options
  3. Limit
  4. FileInfo
  5. AuthConfig

Ainsi Indexes regroupes un ensemble de directives telles : DirectoryIndex (le plus important) mais aussi des moins connues AddIcon, AddDescription.

Pour Options : Options entre autres.

Pour Limit : Allow, Deny, Order

FileInfo :

1er groupe : directive contrôlant les types de documents : ErrorDocument (par exemple erreur 404, 401, 500. SetHandler (spécifie qui exécute les scripts php par exemple),

2eme groupe : les méta données des documents : Header, SetEnvIf (définit des variables d’environnement de façon conditionnel en PHP retrouvez les variables d’environnement dans $_SERVER, utile pour distinguer l’environnement de développement de la production)

3ème groupe : le module mod_rewrite : RewriteEngine, RewriteBase, RewriteCond, RewriteOptions, RewriteRule, ça je pense que ça vous est familier !

4ème groupe : le module mod_alias : RedirectPermanent (pour faire les 301), Redirect (Pour les 302), RedirectMatch entre autre.

5ème groupe : le module mod_actions : Action(utilisé lorsque vous exécutez les fichier php non pas avec un module apache, mais avec un script CGI comme quasiment tous les serveur Apache actuels). Action est utilisé avec AddHandler, en effet ce dernier spécifie le type de fichier, leur mime-type.

6ème groupe : le module mod_mime : AddHandler, RemoveHandler etc.

Valeurs possibles de AllowOverride : None, All et options spécifiques

AllowOverride None

Dans ce cas votre fichier htaccess sera sans effet, il ne pourra pas modifier ce qui a déjà été défini dans le fichier httpd.conf ou tout autre fichier de configuration de virtual host.

AllowOverride All

Là tout est permis, c’est à dire ce qui a été listé (les 5 points)

AllowOverride Options=Multiviews, Indexes

Si vous essayez de surcharger une directive non définie dans l’exemple ci-dessus provoquera « Internal Server Error », autant dire, ce message d’erreur ne va pas vous aider beaucoup, dans ce cas allez dans les logs d’Apache.

Au fait savez vous comment on définit le fait que c’est le fichier .htaccess qui contient les directives? C’est Grâce à une autre directive AccessFileName qui spécifie le nom du fichier qui comporte tous les réglages ! Vous pouvez donc le modifier !

Une chose à laquelle il faut prêter particulièrement attention, ce sont les valeurs par défaut des directives, suivant les versions d’Apache. Par exemple, à partir d’Apache 2.3.9, AllowOverride est à None, alors qu’avant c’était à All !!

Dépannage erreurs courantes de Apache en lien avec AllowOverride

Pourquoi AllowOverride provoque-t-il une Internal Server Error ?

Une erreur 500 Internal Server Error apparaît souvent lorsqu’une directive présente dans le fichier .htaccess n’est pas autorisée par la configuration AllowOverride. Par exemple, si AllowOverride autorise uniquement FileInfo et qu’une directive relevant d’Options est utilisée, Apache retourne une erreur sans forcément fournir beaucoup d’informations à l’utilisateur. La meilleure approche consiste à consulter le fichier error.log relatif à votre virtualhost (cf dnas le fichier de votre vhost vous le trouverez)afin d’identifier la directive fautive. Vérifiez également la syntaxe du fichier .htaccess, la présence de modules nécessaires comme mod_rewrite et la compatibilité des directives utilisées avec votre version d’Apache.

Comment savoir si Apache lit réellement mon fichier .htaccess ?

Il est parfois difficile de déterminer si Apache prend réellement en compte un fichier .htaccess. Une méthode simple consiste à ajouter volontairement une directive invalide dans le fichier. Si Apache retourne immédiatement une erreur 500 Internal Server Error, cela signifie que le fichier est bien lu. À l’inverse, si le site continue de fonctionner normalement, il est probable que le fichier soit ignoré. Vérifiez alors la valeur de la directive AllowOverride dans votre configuration Apache. Assurez-vous également que le fichier se trouve dans le bon répertoire et qu’il est correctement nommé .htaccess. Les journaux d’erreurs Apache constituent également une source précieuse d’informations pour confirmer le chargement du fichier. Le fichiet htaccess permet de donner la main à des utilisateurs n’ayant pas accès au httpd.conf originel le droit de faire quelques réglages.

RewriteEngine ou RewriteRule ne fonctionne pas

Lorsque RewriteEngine On ou une règle RewriteRule semble sans effet, il faut d’abord vérifier que le module mod_rewrite est activé sur le serveur Apache. Sous Debian ou Ubuntu, la commande a2enmod rewrite permet généralement de l’activer. Ensuite, la directive AllowOverride doit autoriser la catégorie FileInfo, car les règles de réécriture en dépendent. Vérifiez également que RewriteEngine On est présent avant les règles et que les expressions régulières utilisées sont correctes. Enfin, après toute modification de configuration Apache, n’oubliez pas de recharger ou redémarrer le serveur afin que les changements soient effectivement appliqués. Comme règle que je conseille de suivre, c’est d’y aller progressivement, en partant de quelquechose de simple , et d’incrémenter les instructions.

AllowOverride All est souvent utilisé en pratique lors du débogage pour écarter d’emblée tout problème de permission, avant d’affiner.

Point de vigilance : RewriteBase est une source fréquente d’erreur silencieuse (chemins relatifs mal résolus), surtout en sous-répertoire

Pourquoi mon fichier .htaccess ne fonctionne pas ?

Lorsqu’un fichier .htaccess semble ignoré par Apache, la cause la plus fréquente est une mauvaise configuration de la directive AllowOverride (AllowOverride définit quelles directives d’un .htaccess Apache est autorisé à prendre en compte pour le répertoire concerné) . Si celle-ci est définie à None dans le bloc Directory correspondant, Apache lit le fichier mais n’applique aucune de ses directives. Vérifiez également que le fichier est bien nommé .htaccess, qu’il se trouve dans le bon répertoire et que les permissions sont correctes. Une autre erreur fréquente consiste à modifier le mauvais VirtualHost. En cas de doute, consultez les journaux d’erreurs Apache qui indiquent généralement pourquoi le fichier .htaccess n’est pas pris en compte.

Le module mod_rewrite doit être activé (a2enmod rewrite) si le .htaccess contient des règles de réécriture.

La directive AllowOverride doit se trouver dans le bon bloc <Directory> — celui qui correspond au chemin physique réel du fichier, pas forcément le VirtualHost.

Retour en haut