Comment créer des redirections 301 avec expressions régulières dans PrestaShop ?

Publié le 29 novembre 2019 par Amerigeau @arnaudmerigeau

Une des demandes que je vois le plus passer est la refonte de site web sous PrestaShop et la plupart du temps aucun plan de redirection n'est défini ! Ceci signifie que les urls de ta boutique avant refonte risquent aboutir à des erreurs 404 fatales pour ton référencement. C'est pour ça qu'on va voir comment créer une redirection dans cet article !

Je vais te donner 2 manières de créer une redirection manuelles pour ta boutique.

Puis je vais aussi te donner une troisième manière de créer une redirection, c'est le bonus !

Méthode 1 : Comment créer une redirection 301 via .htaccess avec PrestaShop ?

Pour ce faire tu dois te connecter en FTP à ton serveur puis tu dois ouvrir le fichier .htaccess qui se situe dans le dossier racine souvent nommé /www/.

Avec ton éditeur préféré, tu dois ensuite ajouter une ligne par redirection d'url au début du fichier sous la forme :

RedirectPermanent /dossier/ancienne-url.html https://www.monsiteweb.com/dossier/nouvelle-url.html

Dans cet exemple, on va simplement rediriger l'url https://www.monsiteweb.com/dossier/ancienne-url.html vers l'url https://www.monsiteweb.com/dossier/nouvelle-url.html.

Une fois la redirection mise en place, tu dois tester celle-ci pour éviter les erreurs 500 (pages blanches), et les erreurs 404 (pages introuvables). Je te donne le lien d'un outil que j'utilise à la fin de cet article 😉

Méthode 2 : Comment créer une redirection 301 via un module PrestaShop ?

Je vais te donner ici un lien vers un module que j'utilise sur certains projets car il est simple et rapide à utiliser.

Tu peux acheter et télécharger le module PrestaShop en cliquant ici : Module de redirection PrestaShop.

Plutôt qu'un long discours, voici une capture d'écran pour illustrer l'utilisation back office.

Tu as compris : c'est TRÈS SIMPLE à utiliser puisqu'il suffit de saisir dans le back office de PrestaShop l'url source et l'url cible et c'est tout !

Oui mais...

Il y a un " mais "car si tu as des centaines ou des milliers de redirections à créer, ça va te prendre beaucoup de temps !

C'est pour cette raison que je vais te montrer une troisième méthode pour créer des redirections.

Cette troisième méthode est un peu plus technique mais aussi plus puissante.

Ok mais pourquoi ?

Et bien parce que cette 3ème façon de créer des redirections te permet par exemple en 1 ligne de code de rediriger des centaines ou des milliers d'urls !

Méthode 3 : comment créer des redirections 301 avec expressions régulières dans PrestaShop ?

Cette méthode est finalement assez simple à mettre en place tu vas voir.

Ce qui fait mal à la tête : c'est les expressions régulières !

Qu'est-ce qu'une une expression régulière ?

Si tu ne sais pas encore ce qu'est une expression régulière, je t'invite à lire l' article de Open Class Room ou encore cet article https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres

Comment tester une expression régulière regex ?

A présent, tu as révisé tes bases avec Open Class Room et tu sais comment construire une expression régulière.

J'utilise cet outil pour créer et tester les expressions régulières que je développe pour mes projets : https://regex101.com

Les informations essentielles sont présentes directement. Tu peux saisir ton expression régulière et ta chaîne de caractères à tester, puis retrouver à droite le détail de ton expression régulière ; le tout est instantané avec des couleurs pour plus de lisibilité.

Comment créer des redirections 301 avec expressions régulières dans PrestaShop ?

Pour créer une redirection 301 avec expression régulière dans PrestaShop tu dois créer ou modifier l'override /www/override/classes/controller/FrontController.php comme ceci :

<?php /** * 2007-2019 PrestaShop and Contributors * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/OSL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to https://www.prestashop.com for more information. * * @author PrestaShop SA <contact@prestashop.com> * @copyright 2007-2019 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class FrontController extends FrontControllerCore { /** * Initializes redirections. * Arnaud Merigeau - www.arnaud-merigeau.fr * PrestaShop 1.7.6.1 */ public function initContent() { // PHP REGEX REDIRECT $base_url = "https://$_SERVER[HTTP_HOST]"; $request_uri = "$_SERVER[REQUEST_URI]"; $redirect_targets = array( '#^/brand/([\d]{1,})+[-]+([\w]{1,})$#i' => '/$1_$2', '#^/marques/([\d]{1,})+[-]+([-]|[\w]{1,})$#i' => '/$1-$2', ); foreach ($redirect_targets as $pattern => $redirect) { if ( preg_match( $pattern, $request_uri ) ) { $new_request_uri = preg_replace( $pattern, $redirect, $request_uri ); $new_url = 'https://'.$_SERVER['HTTP_HOST'].$new_request_uri; header( 'HTTP/1.0 301 Moved Permanently' ); header( 'Location: '.$new_url ); exit(); } } $this->assignGeneralPurposeVariables(); $this->process(); if (!isset($this->context->cart)) { $this->context->cart = new Cart(); } $this->context->smarty->assign(array( 'HOOK_HEADER' => Hook::exec('displayHeader'), )); } }

Pour information, j'ai testé cet override sur PrestaShop 1.7.6.1.

On retrouve $redirect_targets qui est un tableau contenant les différentes règles :

  • règle #1 : '#^/brand/([\d]{1,})+[-]+([\w]{1,})$#i' => '/$1_$2'
  • règle #2 : '#^/marques/([\d]{1,})+[-]+([-]|[\w]{1,})$#i' => '/$1-$2'

La règle #1 redirige les urls de la forme https://www.monsite.fr/brand/3-mamarque vers des urls sous la forme https://www.monsite.fr/3_mamarque.

Le GROS avantage de cette solution : avec 2 lignes, je peux créer des milliers de redirections 301 sans effort et sans avoir autant de lignes que de redirections dans le fichier .htaccess.

Comment tester une redirection 301 saisie dans le .htaccess ?

Une fois que toutes tes redirections 301 sont en place, je te conseille de tester ces redirections pour être certain qu'aucune erreur 404 ou 500 ne viendra pénaliser ton référencement.

J'utilise cet outil https://htaccess.madewithlove.be qui fonctionne de la sorte :

  • tu saisis l'url source
  • tu saisis le contenu de ton fichier .htaccess
  • tu valides et l'outil t'indique vers quelle url l'internaute est redirigé

J'espère que ce tutoriel référencement pour PrestaShop t'a plu et qu'il t'aura été utile.

Si vous n'avez pas le temps ou les compétences pour modifier votre boutique PrestaShop, je peux m'en charger !

Contactez-moi

Vous avez aimé cet article ? Notez-le avec les étoiles ! Merci !