Je travaille actuellement sur la migration vers Prestashop d’une boutique réalisée avec Oscommerce. Pour la migration aucun problème le module oscommerce to prestashop réalisé par Presto Changeo s’occupe de tout, en quelques minutes c’est fait. Par contre si vous désirez conserver le référencement de votre site c’est une autre histoire.
Tout d’abord la redirection des fiches produits est assez simple à mettre en oeuvre.
Voici ce que vous devez mettre dans votre fichier .htaccess:
#les produits RewriteRule ^[a-zA-Z0-9-]*p-([0-9]+)\.html$ /product.php?id_product=$1 [R=301]
Au tour des catégories maintenant, là c’est plus compliqué. En effet, lors de l’importation l’ID des catégories sous Prestashop diffère de celui d’origine sous Oscommerce. Pourquoi ? Tout simplement parce que Prestashop utilise une catégorie mère « home », ce qui a pour résultat d’incrémenter de 1 l’ID de toutes les catégories.
Par conséquent la redirection ne peut pas se faire simplement avec un fichier htaccess.
Il faut d’abord créer un fichier « redirect_cat.php » et y insérer le code suivant:
if(is_numeric($_GET['id_category'])) {
$psCatId=$_GET['id_category']+1;
}
else {
header("Status: 404 Not Found");
exit();
}
$url="http://".$_SERVER['HTTP_HOST']."/category.php?id_category=".$psCatId;
header("Status: 301 Moved Permanently", false, 301);
header("Location: ".$url);
exit();
Ensuite dans votre fichier .htaccess il faut rediriger les anciennes url vers ce fichier tout en récupérant l’id de la catégorie (sous oscommerce).
#3 niveau RewriteRule ^[a-zA-Z0-9-]*c-[0-9]+_[0-9]+_([0-9]+)\.html$ /redirect_cat.php?id_category=$1 [R=301] #2 niveaux RewriteRule ^[a-zA-Z0-9-]*c-[0-9]+_([0-9]+)\.html$ /redirect_cat.php?id_category=$1 [R=301] #1 niveau RewriteRule ^[a-zA-Z0-9-]*c-([0-9]+)\.html$ /redirect_cat.php?id_category=$1 [R=301]
Voila désormais les redirections des catégories fonctionnent.
A noter:
J’ai supposé que les url de vos fiches produit sous Oscommerce étaient de la forme suivante:
le-nom-de-mon-produit-p-25.html - "p" signifie produit - "25" est l'ID du produit
Pour les catégories je n’avais que 3 niveaux à gérer je ne me suis donc pas pris la tête à faire une règle qui gère l’ensemble des niveaux. A vous de la créer, n’hésitez pas à venir la poster dans les commentaires :).
L’url supposée d’une catégorie est la suivante:
nom-de-ma-categorie-c-120-25-36.html - "c" signifie catégorie - "120" est l'ID de la catégorie de premier niveau - "25" est l'ID de la catégorie de second niveau - "36" est l'ID de la catégorie de troisième niveau
Sachez que vous n’avez pas besoin de récupérer les ID de toutes les catégories mais seulement celui de la dernière car Prestashop est capable de remonter l’ensemble des catégories tout seul.

Maxime
Bonjour,
Je viens de tomber sur votre article et c’est exactement ce que je cherchais. Je suis moi même actuellement en pleine migration mais voila, vous indiquez des structure d’url différente de celle que j’ai moi, c’est à dire des urls de base sans url friendly du type:
http://www.monsite.com/catalog/index.php?cPath=1_22 pour les catégories
http://www.monsite.com/catalog/index.php?cPath=1_22_3333 pour les sous catégories
http://www.monsite.com/catalog/product_info.php?cPath=1_22_3333&products_id=44555 pour les produits
Pouvez-vous me dire s’il est possible de faire des redirections avec ce type d’url, faut-il que j’active sur prestashop les url simplifiée et faut-il renommer le dossier prestashop à l’identique de celui d’oscommerce dans mon cas ‘catalog’.
Dans l’attente de votre réponse,
Cordialement
Maxime
maniT4c
Oui cela devrait fonctionner. Il faudra par contre modifier les règles de réécritures dans le fichier htaccess.
Et oui en effet il est préférable d’activer la réécriture d’url dans Prestashop.
Une petite remarque supplémentaire d’ailleurs au sujet de cet article.
La technique employée pour la redirection des catégories fonctionne mais génère deux redirections consécutives(une via htaccess et une via php). Ne sachant pas si Google apprécie cela, j’ai finalement opté pour des redirection direct et j’ai dû prendre toutes les catégories une par une pour les rediriger dans mon Htaccess. un peu long à faire mais au moins il n’y à qu’une seule redirection.
Maxime
Merci pour votre réponse,
Qu’entendez vous par « modifier les règles de réécritures ».
si je procède pour la réécriture des produits comme ci
RewriteRule ^catalog/product_info.php?&products_id=([0-9]+)$\/product.php?id_product=$1 [R=301]
et pour les catégories et sous catégories
RewriteRule ^catalog/index.php?cPath=([0-9]+)$\/category.php?id_category=$+1 [R=301]
RewriteRule ^catalog/index.php?cPath=[0-9]+_([0-9]+)$\/category.php?id_category=$+1 [R=301]
Sachant que pour les catégories et sous catégories il faut ajouter (+1 ID)est ce que cela fonctionnerait?
Cordialement
Maxime
maniT4c
je ne peux pas dire si la règle est bonne comme ça il faudrait tester mais je pense que oui ça devrait marcher.
Par contre à mon avis le +1 ne marchera pas dans le htaccess, c’est pour cela que dans mon exemple je passe par un fichier php intermédiaire.
Maxime
comment avez-vous fais alors pour rediriger les catégories et sous catégories ?
Cordialement
Maxime
maniT4c
Comme je l’explique dans mon article avec le fichier intermédiaire qui rajoute le +1 à l’id de la catégorie.
Maxime
Si je comprends bien, vous avez donc fais les redirections de produits via l’htaccess et les redirections des catégories et sous catégories via le fichier php ?
maniT4c
pour le produit, uniquement htaccess
pour les catégories le fichier htaccess récupère l’id et appel la page php qui elle ajoute +1 à l’id et appel la catégorie correspondante.
Maxime
d’accord,
et toutes ces données (htaccess et redirect_cat.php) sont à mettre sous prestashop ou oscommerce ?
maniT4c
Du coté Prestashop
Maxime
Merci pour votre aide,
je supposes que le fichier redirect_cat.php et le htacces doivent être à la racine de prestashop avec les fichiers tel que 404.php…
Cordialement
Maxime
maniT4c
htaccess oui le fichier php pas nécessairement.
Maxime
pour modifier le htaccess faut-il passer par le backoffice (générateur) ou peut-on l’éditer manuellement ?
maniT4c
non il faut passer par le générateur sinon prestashop écrasera systématiquement vos modifications.
thierry
Bonjour,
comment c’est deroulé la migration avez vous eu des pertes dans le référencement ?
j’hesite en effet entre utilisé cette méthode, ou un module trouvé sur internet qui permet de réecrire les urls prestashop a la façon de oscommerce même si je trouve cela limité dans les évolutions et mises a jour.
merci
maniT4c
Bonjour Thierry,
clairement c’est une mauvaise idée de réécrire les url à la « oscommerce », le système prestashop est beaucoup mieux.
Je n’ai pas rencontré de problème au niveau de la migration et les redirection marche sans problème.
Thierry
Bonjour,
Merci pour ces informations, je vais donc utiliser votre méthode et laisser tomber mon idée de réecrire les urls a la oscommerce.
Bruno
Bonjour
Vous indiquez presta changeo (j’ai vu leur module il a l’air pas mal) $125 :<(
mais dans prestashop 1.5.3 il y a le module oscommerce to prestashop par defaut, par contre aucune configuration possible!
Savez vous si celui par defaut marche t-il? et comment?
Autrement si ce n'est pas le cas, celui de presta changeo fonctionne t-il avec la version de PS 1.5.3 et est-il vraiment facile pour la migration?
Supporte t-il 17921 clients, 19372 commandes , 20470 produits?
Merci pour votre aide :<)
maniT4c
Bonjour Bruno,
Impossible de dire si le module de prestochangeo fonctionne bien avec la 1.5.3 car la dernière fois que j’ai dû l’utiliser je travaillais sur une 1.4.8
Je n’ai rencontré que le problème expliqué dans cet article lorsque j’ai utilisé ce module. Par contre je n’ai pas eu à l’utiliser sur un catalogue avec autant de référence. En terme de clients/commandes c’était assez proche de ce que vous avez.
Je n’ai pas utilisé le module natif de Prestashop car il avait mauvaise réputation sur la 1.4.x. Je ne sais pas si l’équipe de PS à retravailler ce module pour la 1.5