Nouveau type d’attaque par phishing : le tabnagging !

juillet 7th, 2010

Après notre espion paparazzi ;) voici un article pour vous présenter et vous prévenir qu’un nouveau type d’attaque à fait apparition sur internet ces dernières semaines s’intitulant le tabnagging.

Le tabnagging est en fait une technique de phishing (encore un terme suspect :) )

Pour rappel voici la définition du Phishing (Source Wikipedia) :
Phishing (ou hameçonnage, et parfois filoutage), est une technique utilisée par des fraudeurs pour obtenir des renseignements personnels dans le but de perpétrer une usurpation d’identité. La technique consiste à faire croire à la victime qu’elle s’adresse à un tiers de confiance — banque, administration, etc. — afin de lui soutirer des renseignements personnels : mot de passe, numéro de carte de crédit, date de naissance, etc.

Maintenant que vous êtes imbattable en sécurité informatique voici le principe de fonctionnement du tabnagging :

Vous êtes sur votre page web préférée et vous décidez d’ouvrir un nouvel onglet pour allez visiter une autre page. Jusqu’à là rien d’anormal, mais, pendant ce temps.. un script malicieux va modifier votre page préférée (la première que vous regardiez à l’instant) et va modifier son contenu pour afficher une page Gmail (fausse) et prête à vous demander vos identifiants. Si vous n’avez pas fait attention et que vous retournez sur votre premier onglet, vous allez saisir vos identifiants afin de consulter vos mails (comme d’habitude après tout ?). Sauf que le site n’est pas Gmail et vous venez d’être victime de tabnagging ! Pour le moment ce n’est pas parfait, mais avec le temps ce type d’attaques pourrait vite devenir un fléau.

Une équipe de développement de plugins pour firefox suit ce phénomène et a apporté des correctifs à son extension pour vous protéger de cette attaque, voici le lien https://addons.mozilla.org/fr/firefox/addon/722/.
Une vidéo du script en action : http://vimeo.com/12003099

Soyez prudents !

Qui se cache derrière AppliBox ?

juillet 7th, 2010

Voici une question que beaucoup de personnes se posent et dont la réponse n’était jusqu’à maintenant disponible qu’à l’intérieur des locaux d’AppliBox.

Mais heureusement, grâce à mes talents d’espion, je suis fier de partager aujourd’hui LA photo de l’équipe d’AppliBox, celle qui révélera notre identité aux yeux de tous.

Voici donc, de gauche à droite, Véronique, Didier, Johann, Vanessa et Fabrice, sans oublier Velvet, notre mascotte :

Evidemment, nos bureaux sont ouverts et vous pouvez venir boire un café pour nous rencontrer en chair et en os pour parler de votre projet quand bon vous semble.

Magento : redirection des nouveautés & tri des produits groupés

juin 28th, 2010

Dans la continuité du développement d’un de nos sites e-commerce sous Magento, nous avons du répondre aux besoin suivants :

  • rediriger l’utilisateur lorsqu’il clique sur un produit affiché en tant que nouveauté sur la page d’accueil vers la catégorie parente de ce produit.
  • résoudre un bug de Magento qui change constamment l’ordre de la liste des produits simples contenus dans un produit groupé.

Redirection :

  • Comme vous le savez peut-être déjà, la gestion de nouveaux produits sur la page d’accueil se fait par le template /app/design/frontend/votre_interface/votre_theme/template/catalog/product/new.phtml
  • Ouvrez donc ce fichier et placez vous juste après la ligne suivante : <?php $i=0; foreach ($_products->getItems() as $_product): ?>
  • Ce code représente la boucle sur les nouveaux produits, ajoutez donc le code suivant :
    <?php
    /**
    * On récupère les catégories du produit sur lequel on est focalisé
    */
    $_categories = $_product->getCategoryIds();
    /**
    * Parmi ces catégories, on récupère la première
    */
    $_category = Mage::getModel('catalog/category')->load($_categories[0]);

    /**
    * Il nous faut ensuite trouver la catégorie parente
    */

    $parentCategory = Mage::getModel('catalog/category')->load($_category->getParentId());
    /**
    * Ainsi que l'id
    */

    $this_id = $_category->getId();
    /**
    * On crée ensuite l'url qui correspondra à URL_de_la_catégorie_parente.?cat=numéro_de_la_catégorie_du_produit
    */

    $url = $parentCategory->getUrl()."?cat=".$this_id;
    ?>
  • Si vous souhaitez que la redirection soit effectuée lorsque vous cliquez sur le titre du produit par exemple, il vous suffit de trouver le div ayant pour classes padtop10 et padbotlistinghome et de remplacer l’url du produit par : <a href="<?php echo $url ?>"
  • Vos produits en page d’accueil redirige désormais vos utilisateurs vers la catégorie parente du produit.

N.B. : Certains d’entre vous nous feront sûrement remarquer la possibilité d’utiliser simplement le code suivant :
$_category = Mage::getModel('catalog/category')->load($_categories[0]);
$url = $_category->getURL();

Seulement le problème est que, dans le cas de sous-sous-catégorie, cette URL nous fournit bien la liste des produits de la catégorie mais la page affichée ne contient pas le bloc « Filtrer par » qui permet la navigation entre les catégories, ce qui est assez embêtant et laisse un vide assez conséquent dans la page.

Résolution de bug :

Peut-être que vous avez déjà rencontrer le problème suivant : sous Magento, dans la page produit d’un produit groupé, les produits ne sont pas triés, c’est-à-dire que deux produits groupés totalement identiques (avec des sku et des noms différents) afficheront une liste de produits dans un ordre différent.

Un bug qui paraît anodin mais qui, peut parfois devenir déconcertant pour un client : imaginez une boutique de vente en ligne de CD sous la forme de produit groupé contenant un CD physique et un CD téléchargeable. Un utilisateur qui n’acheterait que des CD téléchargeables souhaiterait pouvoir savoir où se trouvent le produit téléchargeable dans la liste et toujours choisir le 1er ou le 2ème produit de la liste sans avoir à vérifier à chaque achat !

Pour résoudre ce bug, rien de plus simple :

  • Copiez le fichier app/code/core/Mage/Catalog/Model/Product/Type/Grouped.php
  • Créez l’arborescence suivante : app/code/local/Mage/Catalog/Model/Product/Type et copiez y votre fichier Grouped.php
  • Ouvrez le et trouvez les lignes suivantes dans la fonction getAssociatedProducts vers la ligne 117 du fichier:
    $collection = $this->getAssociatedProductCollection($product)
    ->addAttributeToSelect('*')
    ->addFilterByRequiredOptions()
    ->setPositionOrder()
    ->addStoreFilter($this->getStoreFilter($product))
    ->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product)));
  • Ces lignes représentent l’ensemble des produits associés à un produit groupé, afin de trier ces produits (par nom, par prix, etc…), il vous suffit de modifier ces lignes de la façon suivante (pour le tri par nom de produit dans notre cas ) :
    $collection = $this->getAssociatedProductCollection($product)
    ->addAttributeToSort('name')
    ->addAttributeToSelect('*')
    ->addFilterByRequiredOptions()
    ->setPositionOrder()
    ->addStoreFilter($this->getStoreFilter($product))
    ->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product)));
  • Le tri sera désormais activé sur tous vos produits groupés.

C’est terminé pour aujourd’hui, j’espère qu’AppliBox vous aura aidé à améliorer l’ergonomie de votre site.

Ajout de boutons « Précédent » et « Suivant » sur la fiche produit Magento

juin 24th, 2010

Une fonctionnalité très utile mais qui manque à la version Community de Magento est la possibilité d’ajouter des boutons de navigation « Précédent » et « Suivant » entre les produits d’une même catégorie.
Il existe évidemment des extensions qui permettent d’implémenter cette possibilité mais elles sont payantes, c’est pourquoi voici une méthode simple et surtout gratuite pour mettre en place ce système.

  1. En premier lieu, ouvrez le fichier ./app/design/frontend/votre_interface/votre_theme/template/catalog/product/view.phtml
  2. Ajoutez le code suivant juste après les commentaires Magento :
    <?php
    $_helper = $this->helper('catalog/output');
    $_product = $this->getProduct();
    /**
    * Determine les liens précédents/suivants et le lien vers la categorie parente
    */
    $_ccats = $this->helper('catalog/data')->getProduct()->getCategoryIds();
    $_ccat = Mage::getModel('catalog/category')->load($_ccats[0]);
    $ppos = $_ccat->getProductsPosition();
    arsort($ppos);
    $current_pid  = $this->helper('catalog/data')->getProduct()->getId();
    // Déclaration d'un tableau contenant les positions
    $plist = array();
    foreach ($ppos as $pid => $pos) {
    $plist[] = $pid;
    }
    sort($plist);
    $curpos   = array_search($current_pid, $plist);
    // Obtenir le lien du produit suivant
    $previd   = isset($plist[$curpos+1])? $plist[$curpos+1] : $current_pid;
    $product  = Mage::getModel('catalog/product')->load($previd);
    $prevpos  = $curpos;
    while (!$product->isVisibleInSiteVisibility()) {
    $prevpos += 1;
    $nextid   = isset($plist[$prevpos])? $plist[$prevpos] : $current_pid;
    $product  = Mage::getModel('catalog/product')->load($nextid);
    }
    $next_url = $product->getProductUrl();
    // Obtenir le lien du produit précédent
    $nextid   = isset($plist[$curpos-1])? $plist[$curpos-1] : $current_pid;
    $product  = Mage::getModel('catalog/product')->load($nextid);
    $nextpos  = $curpos;
    while (!$product->isVisibleInSiteVisibility()) {
    $nextpos -= 1;
    $nextid   = isset($plist[$nextpos])? $plist[$nextpos] : $current_pid;
    $product  = Mage::getModel('catalog/product')->load($nextid);
    }
    $prev_url = $product->getProductUrl();
    // Obtenir le lien de la catégorie
    $more_url = $_ccat->getUrl();
    ?>
  3. Une fois ce code ajouté, trouvez les lignes suivants :
    <div>
    <input type="hidden" name="product" value="<?php echo $_product->getId() ?>" />
    <input type="hidden" name="related_product" id="related-products-field" value="" />
    </div>

    Et ajoutez le code suivant en dessous de celles-ci :
    <div>
    <table cellspacing="0" border="0" width="100%">
    <tr>
    <td style="text-align:left;"> <a href="<?= $prev_url; ?>"><?php if ("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] <> $prev_url) echo $this->__('←  Précedent') ?></a></td>
    <td style="text-align:center;"> <a href="<?= $more_url; ?>"><?php echo $this->__('Catégorie') ?></a></td>
    <td style="text-align:right;"> <a href="<?= $next_url; ?>"><?php if ("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] <> $next_url) echo $this->__('Suivant →') ?></a></td>
    </tr>
    </table>
    </div>
  4. Vous disposez désormais de trois liens vous permettant de naviguer à travers les produits d’une même catégorie.

Voici un petit exemple du résultat obtenu sur le site e-commerce Magento Médias Aviron (NB : le lien vers la catégorie parente a été désactivée sur ce site) :

  • Si vous vous trouvez au premier (dernier) produit d’une catégorie, le lien « Précédent » (« Suivant ») n’apparaît pas :
  • Sinon, les deux apparaissent :

En espérant que ce petit tutoriel vous servira pour améliorer votre site e-commerce Magento.

Import des clients d’une plateforme ecommerce vers une plateforme Magento

juin 16th, 2010

Voici une technique utilisée lors du transfert de l’un de nos clients d’une plateforme ecommerce vers une plateforme magento. Elle vous donnera peut être une piste si vous avez besoin d’importer des clients existants dans une base Magento. Attention tout de même cette technique est à adapter en fonction des besoins.

Pour cette opération vous aurez besoin de :

  • Votre ancienne base de données avec Phpmyadmin installé
  • Le nouveau Magento installé avec l’accès à l’administration et notamment l’accès à l’interface Importer/Exporter

Le but de l’opération est de créer un fichier csv à l’aide de Phpmyadmin prêt pour l’import dans Magento. Cette technique implique le fait que votre base de données existante doit avoir un minimum de points communs avec le fichier d’import magento. Elle évite aussi de passer par un script PHP intermédiaire.

1ère étape : Récupérer la liste des champs disponibles dans le fichier d’export Magento

  • Allez sur le BackOffice de votre Magento
  • Menu Système / Importer Exporter / Profils
  • Par défaut un profil est créer « Export Customers ». Exécuter le afin de récupérer le CSV avec tous les noms des champs.
  • Voici donc la liste des champs disponibles et à compléter lors de l’import des clients dans Magento : website    email    group_id    prefix    firstname    middlename    lastname    suffix    password_hash    taxvat    billing_prefix    billing_firstname    billing_middlename    billing_lastname    billing_suffix    billing_street_full    billing_city    billing_region    billing_country    billing_postcode    billing_telephone    billing_company    billing_fax    shipping_prefix    shipping_firstname    shipping_middlename    shipping_lastname    shipping_suffix    shipping_street_full    shipping_city    shipping_region    shipping_country    shipping_postcode    shipping_telephone    shipping_company    shipping_fax    created_in    is_subscribed    group

2ème étape : Créer la requête SQL qui permettra d’exporter un fichier CSV des clients prêt à l’import dans Magento

Dans notre cas tous les champs ne sont pas forcémment complétés dans l’ancien système. Notre requête ne reprendra donc pas l’ensemble des champs.

Voici la requête une fois terminée :

SELECT
"base" AS website,
old_table_user.user_email AS email,
"Client" AS group_id,
old_table_user.first_name AS firstname,
old_table_user.last_name AS lastname,
"motdepasseachanger" AS password_hash,
old_table_user.first_name AS billing_firstname,
old_table_user.last_name AS billing_lastname,
old_table_user.address_1 AS billing_street_full,
old_table_user.city AS billing_city,
"FR" AS billing_country,
old_table_user.zip AS billing_postcode,
CONCAT_WS(' ',old_table_user.phone_1,old_table_user.phone_2) AS billing_telephone,
old_table_user.company AS billing_company,
old_table_user.fax AS billing_fax,
old_table_user.first_name AS shipping_firstname,
old_table_user.last_name AS shipping_lastname,
old_table_user.address_1 AS shipping_street_full,
old_table_user.city AS shipping_city,
"FR" AS shipping_country,
old_table_user.zip AS shipping_postcode,
CONCAT_WS(' ',old_table_user.phone_1,old_table_user.phone_2) AS shipping_telephone,
old_table_user.company AS shipping_company,4ème étape : Import le fichier CSV dans Magento
old_table_user.fax AS shipping_fax,
"default" AS "created_in",
"Client" AS "group",
old_table_user.newsletter AS "is_subscribed"
FROM old_table_user

L’astuce est donc de récupérer le champ désiré et de renommer la colonne avec l’instruction AS de Mysql. Exemple :

old_table_user.user_email AS email,

Si vous n’avez pas l’information dans votre base existante vous pouvez la créer, exemple avec le champ requis website :

"base" AS website,

Mysql dispose de fonctions très intéressantes, notamment CONCAT_WS qui permet de concaténer des valeurs. Exemple ci-dessous avec la concaténation de 2 valeurs dans le futur champ billing_telephone (Sous Magento un seul champ téléphone est prévu d’où cette concaténation).

CONCAT_WS(' ',old_table_user.phone_1,old_table_user.phone_2) AS billing_telephone,

3ème étape : Exporter le fichier des clients

Exécutez votre requête puis exportez le résultat en CSV à l’aide de PhpMyAdmin avec les paramètres suivants:

Champs terminés par : ,
Champs entourés par :  »
Caractère spécial : \
Lignes terminées par : AUTO

N’oubliez pas de cocher la case « Afficher les noms de champ en première ligne ».

Voilà votre CSV est prêt !

4ème étape : Importer le fichier CSV des clients dans Magento

  • Allez sur le BackOffice de votre Magento
  • Menu Système / Importer Exporter / Profils
  • Utiliser le profil créer par défaut « Import Customers ».
  • Vérifier que les paramètres correspondent bien aux paramètres précisés au moment de l’export de PhpMyadmin
  • Importer le fichier via l’assistant.

Vos clients sont importés !

Analyser les performances de son site internet

juin 9th, 2010

Comme tout internaute étant équipé d’une connexion internet correcte, vous n’aimez pas attendre des heures qu’une page web s’affiche, et c’est bien normal !

Pour lutter contre ces lenteurs il existe plusieurs solutions que nous nous efforçons de mettre en place sur nos sites  :

  • alléger les contenus
  • optimiser votre serveur
  • optimisation du code
  • utilisation de framework css
  • utilisation de système de cache..
  • ..

Il existe aussi beaucoup d’outils permettant de mesurer les performances d’un site internet. Ces outils reprennent en général les points détaillés ci-dessus et donne une note de performance pour le site en question.

Voici une petite liste de ceux que nous utilisons le plus souvent chez Applibox :

Plugins pour Firefox :

Site internet :

  • Woozweb : Ce site vous permet de surveiller votre site sur du long terme et vous envoie des alertes par mail quand le temps de réponse de votre site dépasse un temps défini.
  • Google Webmaster Tools : Les outils pour webmaster made in google.
  • Site-perf.com : Site en anglais avec la possibilité de paramétrer le lieu du test, le type de navigateur..

Il y en a bien-sûr plein d’autres. Et-vous, quels sont vos outils favoris ?

Zend Form : Ajouter du code Html avant ou après un élement du formulaire

juin 2nd, 2010

Petit tips pour ajouter du code HTML avant ou après un élément d’un formulaire :

Créer une classe (décorateur) qui hérite de la classe Zend_Form_Decorator_Abstract :

class lib_Abx_Form_Decorator_Html extends Zend_Form_Decorator_Abstract
{
 public function render($content) {
 $placement = $this->getPlacement();
 switch ($placement) {
 case self::APPEND:
 return $content . $this->_options['html'];
 break;
 case self::PREPEND:
 return $this->_options['html'] . $content;
 break;
 }
 }
}

Maintenant on désire ajouter un lien à la suite d’un champ Texte.

$name = new Zend_Form_Element_Text('name');
$name->addPrefixPath ( 'lib_Abx_Form_Decorator', 'lib/Abx/Form/Decorator', 'decorator' ) //chemin vers décorateur
     ->setDecorators(array(
      'ViewHelper',
     array(array('suffix' => 'Html'),
     array('html' => '<a href="http://www.google.fr">aaa</a>', 'placement' => 'append')),
 // On peut remplacer par 'prepend' si on désire le mettre avant le champs
      ));
$form->addElement($name);

Voici le rendu visuel :

Résoudre l’erreur de permissions sur Magento Connect

mai 26th, 2010

Sous Magento, il arrive parfois que lorsque vous souhaitez installer une extension ou mettre à jour vos extensions actuelles, que vous rencontriez l’erreur suivante :

Ce problème est récurrent et sans l’installation d’extensions, Magento perd tous ses avantages, mais heureusement pour nous, il est très simple à résoudre.

Avant de vous expliquer le « comment », je vais vous expliquer le « pourquoi » : Magento Connect a besoin de certaines permissions d’écriture sur certains dossiers et fichiers du webroot de votre site Magento dans le but d’installer de nouvelles extensions ou même lorsqu’il s’agit de mettre à jour votre logiciel vers une nouvelle version.

Nous allons donc changer les permissions de certains dossiers afin de résoudre le problème. Pour ce faire, utilisez un client FTP (nous vous recommandons Filezilla) ou un client SSH (Putty par exemple).

Voici la démarche à suivre en utilisant un client SSH : une fois connecté à votre compte SSH, exécutez les commandes suivantes :

  • cd <votre_dossier_contenant_votre_magento>;
  • find . -type d -exec chmod 777 {} \ ;
  • chmod 666 downloader/config.ini ;

Normalement, vous devriez être désormais capable d’accéder à Magento Connect. Une fois que vous avez terminé votre installation/mise à jour, vous devez remettre les droits initiaux pour empêcher qu’une personne mal intentionnée installe des scripts ou des fichiers malveillants. Exécutez donc les commandes suivantes :

  • find . -type d -exec chmod 755 {} \ ;
  • find . -type f -exec chmod 644 {} \ ;
  • chmod o+w var media app/etc/use_cache.ser ;

C’est terminée, vous êtes désormais capable de vous connecter au Magento Connect Manager comme bon vous semble.

En espérant que cette petite astuce vous sera utile.

Transfert d’un site Magento d’une installation locale à un serveur distant

mai 21st, 2010

Nous l’avons remarqué récemment, le transfert d’un site Magento (de local à serveur ou même de serveur à serveur) est loin d’être une partie de plaisir.

Pour vous éviter les bugs étranges (disparation de produits dans le front-office) et vous faire gagner du temps, voici la démarche à suivre pour transférer de manière propre une boutique Magento :

  1. Tout d’abord, rendez-vous sur l’interface phpMyAdmin du serveur où se trouve votre base de données Magento et exporter votre base dans un fichier SQL. Dans les options, pensez à cocher « Désactiver la vérification des clés étrangères » :Export base Magento
  2. Une fois l’export terminé, vous allez devoir importer cette base sur votre serveur distant en utilisant l’interface phpMyAdmin : Import Base Magento
  3. Normalement l’import devrait se dérouler sans erreur. Désormais, il vous faut modifier deux champs de la table core_config_data : le web/unsecure/base_url et le web/secure/base_url : Modifications core_config_dataEt remplacez la valeur de la colonne value par l’url du site où va être implanter votre site Magento : Changements des secure url et unsecure url
  4. Le paramétrage de votre base de données maintenant terminé, vous pouvez transférer les fichiers de votre site Magento vers le repertoire distant de votre futur site. Une fois les fichiers transférés, il vous faut supprimer le fichier suivant : /app/etc/local.xml ce fichier contient toutes les informations de la base de données de votre site que vous renseignez lors de l’installation de Magento, ainsi que le contenu des dossiers /var/cache, /var/report et /var/session qui contiennent respectivement les données stockées en cache, les rapports d’erreur et les rapports de connexion utilisateur.
  5. Une fois ces fichiers supprimés, rendez-vous à l’adresse de votre site et installez Magento en renseignant bien les informations de la base de données distante. L’installation terminée, tout devrait fonctionner.

En espérant que ce petit tutoriel vous aura servi.

Besoin de vitesse sous Magento ?

mai 12th, 2010

Comme certains d’entre vous ont sûrement pû le contaster, une des plus grandes faiblesses de Magento est son temps de chargement des pages de votre site.

Après quelques recherches, il est possible, suivant la configuration de votre serveur, d’augmenter la vitesse de chargement de vos pages de plus de 200% !

Pour bénéficier de ce gain de vitesse, tout se passe dans le fichier .htaccess se trouvant à la racine de votre boutique e-commerce, l’astuce consistant à activer la compression Gzip en modifiant un peu ce fichier.

Je ne vais pas vous faire attendre plus longtemps et vous expliquer comment faire tout de suite.

  • Ouvrez donc votre fichier .htaccess et cherchez les lignes suivantes :
############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter on all content
###SetOutputFilter DEFLATE

# Insert filter on selected content types only
#AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems…
# BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
# BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Don’t compress images
# SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don’t deliver the wrong content
# Header append Vary User-Agent env=!dont-vary

Si vous êtes un peu anglophone (et j’espère que vous l’êtes), vous comprendrez que ces lignes commentées permettent d’activer la compression des fichiers sur votre serveur Apache.

  • Il ne reste plus qu’à décommenter certaines lignes et ajouter la ligne suivante :
# enable resulting html compression
 php_flag zlib.output_compression on
  • Normalement, vous devriez obtenir ceci :
############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter on all content
SetOutputFilter DEFLATE

# Insert filter on selected content types only
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems…
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Don’t compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don’t deliver the wrong content
Header append Vary User-Agent env=!dont-vary
# enable resulting html compression
php_flag zlib.output_compression on
  • N’oubliez pas d’enregistrer votre fichier .htaccess et de l’uploader sur votre serveur si vous voulez apprécier les changements.

Vous pouvez tester la rapidité en utilisant un site de test de vitesse de chargement des sites comme celui-ci

Les résultats vont de 25% à 225% de gain de vitesse et dépendent principalement de la configuration du serveur.

Bonne optimisation à toutes et à tous.

Source : inchoo.net