aoû
19

Regrouper les .htaccess dans la configuration Apache

Magento et ses Htaccess

Les fichiers htaccess, c’est une grande partie de la force d’Apache. Que ce soit dans Magento ou d’autres Framework, beaucoup utilisent des .htaccess locaux à chaque répertoire pour paramétrer des comportements du serveur Web.

En ajoutant un .htaccess dans un répertoire, on remplace la configuration du serveur Apache par la sienne, tout au moins sur certains points. Le dernier qui a parlé a raison. Donc quand un fichier htaccess redéfinit quelque chose qui a été défini dans un fichier central de configuration Apache, c’est cette portion de configuration qui est dans le fichier htaccess qui aura gain de cause.

Htaccess et I/O

Oui, mais… Les htaccess, c’est aussi un peu gênant car Apache les lit à chaque fois qu’il se balade dans le répertoire, autant dire très souvent. Donc cela génère des I/O inutiles puisque dans le fichier central, ces directives sont lues une bonne fois pour toutes et pas à chaque accès. Du coup, il devient intéressant de « compiler » ou plus exactement de regrouper ces .htaccess dans un même fichier central de configuration d’apache pour optimiser les I/O disque.

Regrouper les htaccess

La manœuvre est relativement simple, on crée un petit bout de script qui va générer les directives à partir des contenus des différents fichiers htaccess qui sont répartis dans l’arborescence, appelons le « berger.sh » par exemple (c’est un peu le berger des .htaccess) :

emacs /usr/bin/berger.sh

#!/bin/bash
PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
echo -e "\n" >> $2
cat `pwd``echo $1|cut -f2,3 -d"."` >> $2
echo -e "\n" >> $2

CTRL+X+S (on ne lache pas la touche CTRL entre l’appuie sur X et celui sur S)

On le rend exécutable :

chmod 755 /usr/bin/berger.sh

Ensuite, on peut lancer une commande qui appelle le berger.sh à chaque fichier .htaccess trouvé dans l’arborescence :

cd /var/www/mon_site
find -name .htaccess -type f -exec /usr/bin/berger.sh '{}'  /etc/apache2/mon_site.conf \;

(attention, n’oubliez pas l’espace avant le \; sinon ca ne marche pas)

Il faut remplacer /etc/apache2/mon_site.conf par le chemin vers votre fichier de configuration apache du site concerné et cd /var/www/mon_site par le répertoire où se trouve le site. Ensuite on test, prudemment, que tout marche toujours bien :

find -name .htaccess -type f -exec mv '{}' '{}'.old  \;
/etc/init.d/apache2 restart

et on constate si ca fonctionne. Si tout est ok, on peut se débarrasser de nos anciens .htaccess :
(n’oubliez pas de vous replacer de le répertoire du site concerné)

find -name .htaccess.old -type f -exec rm '{}' \;

Sinon, on restaure nos .htaccess, on prépare un petit script de restauration :

emacs /usr/bin/resto_berger.sh

#!/bin/bash
PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
mv $1 `echo $1|cut -f1,2 -d"."`CTRL+X+S (on ne lache pas la touche CTRL entre l'appuie sur X et  celui sur S)

On le rend exécutable :

chmod 755  /usr/bin/resto_berger.sh

et on l’exécute :
(n’oubliez pas de vous replacer de le répertoire du site concerné)

find -name .htaccess.old -type f -exec resto_berger.sh '{}' \;

Et voila, normalement, vous avez regroupé tous vos .htaccess dans le fichier de configuration central d’apache et vous gagnez en performances !

Comments are closed.