Magazine Ebusiness

Tuto complet : https / ssl avec PrestaShop

Publié le 12 juin 2017 par Amerigeau @arnaudmerigeau
12 juin 2017

Activer le ssl / https sur sa boutique PrestaShop est aujourd’hui une nécessité pour rassurer, pour se conformer aux exigences de Google et pour vendre sur des marketplaces également. Ayant des clients sur la version 1.5 de PrestaShop et celle-ci étant plus compliquée pour un passage à la connexion sécurisée, voici un tuto détaillé.

Activation du https sur PrestaShop

Le tuto présenté ici est effectué sur la version 1.5.3.1 de PrestaShop car moins claire que la version 1.6 et 1.7 de PrestaShop. IMPORTANT : ce tuto peut aussi fonctionner avec les versions de PrestaShop 1.6 et supérieures.

Pour rappel, vous avez besoin d’un certificat SSL à commander auprès de votre hébergeur pour activer le HTTPS sur votre boutique.

Pas besoin d’être un expert PrestaShop mais un peu de prudence, je vous conseille de faire une sauvegarde complète des fichiers et de la base de données. Une fois la sauvegarde terminée, rendez-vous dans le back office > préférences > général et activez le https en cliquant sur la phrase noire « Please click here to use HTTPS protocol before enabling SSL » (CF capture d’écran).

Tuto complet : https / ssl avec PrestaShop

Une fois que cette option est activée, vous avez désormais sur cette même page la possibilité d’activer ou non le SSL.

Tuto complet : https / ssl avec PrestaShop

Régénération du htaccess de PrestaShop 1.5

Afin de bien rediriger les urls sur le https://votrenomdedomaine.com, rendez-vous dans le back office > préférences > SEO & URLS et vérifiez que les champs « Domaine » et « Domaine SSL » sont bien remplis avec votre nom de domaine y compris les www.

Tuto complet : https / ssl avec PrestaShop

Pour vérifier que le SSL est bien fonctionnel sur votre site, connectez-vous à l’administration de PrestaShop et vérifiez la présence du https comme suit :

Tuto complet : https / ssl avec PrestaShop

Et normalement ça devrait fonctionner partout sur votre site, sauf les pages produits toujours en http:// et la question : pourquoi ? Vous trouverez la solution à votre problème dans la suite de l’article.

Corrections des erreurs courantes avec le HTTPS et PrestaShop

La connexion n’est pas sécurisée sur votre boutique malgré tout

En activant le HTTPS sur votre site, vous devez charger tous les éléments de votre site en HTTPS, qu’ils soient internes ou externes à votre site. Pour vérifier cela, ouvrez votre navigateur (Google Chrome dans mon cas) et faites un clic droit puis « Inspecter ». Un fenêtre du navigateur va s’ouvrir et occuper une partie de l’écran. Dans cette fenêtre, cliquez sur « Console » dans le menu. Si vous lisez des « Mixed Content » alors vous avez un problème de contenu chargé en HTTP donc votre site n’est pas sécurisé.

Tuto complet : https / ssl avec PrestaShop

Il vous faut alors savoir où sont appelés chaque élément pour modifier l’url et basculer en https. La plupart du temps, vérifiez dans les modules qui proposent des éditeurs WYSIWYG (éditeur visuel) et dont le contenu peut être des images.

Vous avez une boucle de redirection sur les fiches produits

Après pas mal de recherche, c’est un bug natif à PrestaShop que l’on peut corriger en faisant un override de la Class Link.php et plus précisément en modifiant la fonction getProductLink à la ligne 94 (PrestaShop 1.5.3.1). Remplacez le http:// pour https:// et ça fonctionne. Voici le code complet de la fonction modifiée :

public function getProductLink($product, $alias = null, $category = null, $ean13 = null, $id_lang = null, $id_shop = null, $ipa = 0, $force_routes = false)
 {
 $dispatcher = Dispatcher::getInstance();

 if (!$id_lang)
 $id_lang = Context::getContext()->language->id;

 if (!$id_shop)
 $shop = Context::getContext()->shop;
 else
 $shop = new Shop($id_shop);
 
 $url = 'https://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang);

 if (!is_object($product))
 {
 if (is_array($product) & isset($product['id_product']))
 $product = new Product($product['id_product'], false, $id_lang);
 else if (is_numeric($product) || !$product)
 $product = new Product($product, false, $id_lang);
 else
 throw new PrestaShopException('Invalid product vars');
 }

 // Set available keywords
 $params = array();
 $params['id'] = $product->id;
 $params['rewrite'] = (!$alias) ? $product->getFieldByLang('link_rewrite') : $alias;
 $params['ean13'] = (!$ean13) ? $product->ean13 : $ean13;
 $params['meta_keywords'] = Tools::str2url($product->getFieldByLang('meta_keywords'));
 $params['meta_title'] = Tools::str2url($product->getFieldByLang('meta_title'));

 if ($dispatcher->hasKeyword('product_rule', $id_lang, 'manufacturer'))
 $params['manufacturer'] = Tools::str2url($product->isFullyLoaded ? $product->manufacturer_name : Manufacturer::getNameById($product->id_manufacturer));

 if ($dispatcher->hasKeyword('product_rule', $id_lang, 'supplier'))
 $params['supplier'] = Tools::str2url($product->isFullyLoaded ? $product->supplier_name : Supplier::getNameById($product->id_supplier));

 if ($dispatcher->hasKeyword('product_rule', $id_lang, 'price'))
 $params['price'] = $product->isFullyLoaded ? $product->price : Product::getPriceStatic($product->id, false, null, 6, null, false, true, 1, false, null, null, null, $product->specificPrice);

 if ($dispatcher->hasKeyword('product_rule', $id_lang, 'tags'))
 $params['tags'] = Tools::str2url($product->getTags($id_lang));
 
 if ($dispatcher->hasKeyword('product_rule', $id_lang, 'category'))
 $params['category'] = Tools::str2url($product->category);
 
 if ($dispatcher->hasKeyword('product_rule', $id_lang, 'reference'))
 $params['reference'] = Tools::str2url($product->reference);

 if ($dispatcher->hasKeyword('product_rule', $id_lang, 'categories'))
 {
 $params['category'] = (!$category) ? $product->category : $category;
 $cats = array();
 foreach ($product->getParentCategories() as $cat)
 if (!in_array($cat['id_category'], array(1, 2)))//remove root and home category from the URL
 $cats[] = $cat['link_rewrite'];
 $params['categories'] = implode('/', $cats);
 }
 $anchor = $ipa ? $product->getAnchor($ipa) : '';

 return $url.$dispatcher->createUrl('product_rule', $id_lang, $params, $force_routes, $anchor);
 }

Votre boutique ne s’affiche plus et vous avez l’erreur ERR_TOO_MANY_REDIRECTS

Si votre navigateur affiche le code erreur ERR_TOO_MANY_REDIRECTS, il se peut que vous ayez oublié d’activer l’option « activer le SSL sur tout le site » dans le back office > Préférences > Générales.

Les liens sont cassés dans les descriptions produits

Pour corriger les anciens liens en http, deux solutions :

1/ Soit vous corrigez à la volée en appliquant du smarty dans les modèles d’affichage TPL du thème (je vous conseille la seconde piste) :

descriptions longues des produits

{$product->description|replace:'http://':'https://'}

descriptions courtes des produits

{$product->description_short|replace:'http://':'https://'}

contenu des pages CMS

{$cms->content|replace:'http://':'https://'}

2/ Soit vous remplacez toutes les urls dans la base de données et dans ce cas, faites une sauvegarde ! Connectez-vous à PhpMyAdmin puis lancez les requêtes suivantes en remplaçant par votre nom de domaine :

table ps_configuration (paramètres de la boutique)

UPDATE ps_configuration SET value = REPLACE(value, 'http://www.maboutique.tld', 'https://www.maboutique.tld') WHERE INSTR(value, 'http://www.maboutique.tld') > 0;

table ps_product_lang (descriptions courtes des produits)

UPDATE ps_product_lang SET description_short = REPLACE(description_short, 'http://www.maboutique.tld', 'https://www.maboutique.tld') WHERE INSTR(description_short, 'http://www.maboutique.tld') > 0;

table ps_product_lang (descriptions longues des produits)

UPDATE ps_product_lang SET description = REPLACE(description, 'http://www.maboutique.tld', 'https://www.maboutique.tld') WHERE INSTR(description, 'http://www.maboutique.tld') > 0;

table ps_cms_lang (pages de contenu CMS)

UPDATE ps_cms_lang SET content = REPLACE(content, 'http://www.maboutique.tld', 'https://www.maboutique.tld') WHERE INSTR(content, 'http://www.maboutique.tld') > 0;

Vérification du passage au HTTPS de PrestaShop

Une fois le tuto suivi, votre boutique est désormais en https mais il est primordial de vérifier que toutes les variantes d’urls pointent bien vers votre boutique. Par exemple si votre boutique est https://www.maboutique.com, il faut que http://www.maboutique.com pointe vers le https.

Vous pouvez vérifier via le site : http://www.redirect-checker.org/index.php

Une fois que vous avez rentré votre adresse en HTTP, le résultat affiché est du genre :

Result
http://www.maboutique.com/
301 Moved Permanently
https://www.maboutique.com/
200 OK

Dans le cas présent, la redirection permanente / 301 est bien active donc tout est normal. Si ce n’est pas le cas, lisez la suite de l’article.

Créer redirection 301 vers PrestaShop en HTTPS

Si votre site n’est pas en https lorsque vous tapez dans la barre d’adresse https://www.maboutique.com alors ouvrez le fichier .htaccess à la racine de votre hébergement. Ajoutez en début de fichier les lignes suivantes après avoir fait une sauvegarde du fichier :

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.votredomaine.fr/$1 [R=301,L]

A partir de maintenant, votre boutique PrestaShop est sécurisée en HTTPS / SSL ! Pensez également à ajouter votre nouveau site https dans Google Search Console (anciennement Webmaster Tools) et à basculer votre site en https dans Google Analytics. Attention également aux éventuelles redirections d’urls à prendre en compte.

Mots clés : https prestashop, prestashop, ssl prestashop, tuto prestashop, tutorial prestashop, tutoriel prestashop

Retour à La Une de Logo Paperblog

A propos de l’auteur


Amerigeau 144 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte