Ayant un WordPress chez 1and1 j’ai voulu activer la compression de mes pages. Après avoir longuement cherché de partout, j’ai trouvé comment procéder, et ce n’est vraiment pas simple…. En effet, il va falloir faire passer tous nos fichiers (js, css, html, …) par PHP afin qu’ils soient compressés à la volée.
Chemin d’accès complet
Il nous faut le chemin d’accès complet chez 1and1. Pour cela on va mettre un fichier temporaire à la racine de notre site qui se nomme info.php
dans lequel on inscrit :
<?php phpinfo(); ?>
On accède à cette page via un navigateur pour avoir toutes les informations liées à PHP. On y cherche la ligne qui correspond à DOCUMENT_ROOT
afin de trouver le chemin d’accès complet de notre site ; par exemple /kunden/homepages/25/d3506178849/htdocs/clickandbuilds/WordPress/
.
Supprimer le fichier info.php.
Création du prepend file
Maintenant on crée un nouveau fichier à la racine de notre site qui se nomme headers.php dans lequel on met :
<?php $pathinfo=pathinfo($_ENV['SCRIPT_FILENAME']); $extension=$pathinfo['extension']; switch ($extension) { case 'css': $contentType = 'text/css'; break; case 'js': $contentType = 'application/x-javascript'; break; case 'xml': $contentType = 'text/xml'; break; default: $contentType = 'text/html'; break; } header("Content-type: ".$contentType); // pour vérifier que notre script est bien exécuté header("X-Homemade-Compression: OK"); ?>
Ce fichier va être appelé pour chaque page et va permettre d’envoyer le bon Content-Type
.
Fichiers .htaccess et php.ini
Maintenant, cela se complique car il va falloir repérer où se situent toutes les ressources que l’on souhaite compresser. Dans le cas de WordPress, il devrait y avoir :
- /wp-includes/js/jquery/*
- /wp-content/themes/votretheme/*
On peut aussi inclure les éventuels répertoires des plugins, et toutes autres ressources.
On se crée un fichier php.ini
:
; Server side compression zlib.output_compression=on zlib.output_compression_level=9 ; tous les fichiers seront parsés par le script headers.php afin d'envoyer le bon Content-Type auto_prepend_file=/kunden/homepages/25/d3506178849/htdocs/clickandbuilds/WordPress/headers.php
On se crée aussi un fichier .htaccess
en y mettant :
AddType x-mapp-php5 .html .htm .css .js .php
Pour que la compression fonctionne sans créer de problème, il va falloir envoyer ces deux fichiers dans chaque répertoire des ressources que l’on souhaite compresser. Par exemple dans /wp-content/themes/votretheme/js/
pour que les fichiers JS du thème soient impactés.
Vous pouvez aussi mettre php.ini
à la racine de votre site web, mais sans utiliser le .htaccess
de ci-dessus afin d’éviter des problèmes avec l’admin.
On teste
Enfin vous pouvez tester si tout est correct grâce à curl
sous Linux :
curl -I -H 'Accept-Encoding: gzip,deflate' --head http://votresite/votreressource.js
Vous devriez voir apparaitre :
X-Homemade-Compression: OK Content-Encoding: gzip