Ajouter règle de rewriting Prestashop 1.5.4

Discussion dans 'e-commerce' créé par lambi521, 26 Avril 2013.

  1. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Bonjour à tous,

    Voilà j'ai créé une nouvelle section de pages (que l'on appellera "cars" par exemple) basée sur la page de recherche de Prestashop 1.5.4

    J'ai donc copié/collé puis adapté search.php en cars.php à la racine, CarsController dans le dossier controller, cars.tpl pour le template etc..Tout fonctionne bien, page php/tpl/controller sont bien associés entre eux et la page s'affiche.

    J'ai besoin maintenant de réécrire les URLs de ces pages avec une règle générale, comme pour les produits ou les catégories
    J'ai donc rajouté dans mon .htaccess :

    Code:
    RewriteRule ^([0-9]+)-cars-([a-zA-Z0-9-]*)$ /cars.php?id_cars=$1 [QSA,L]
    J'avais déjà procédé de la sorte sur un Presta 1.4 et ça fonctionnait impec, puisque les règles de rewriting se trouvaient dans le .htaccess, il fallait juste en rajouter une. Mais sur cette nouvelle version il n'y a plus les autres règles dans le .htaccess, je ne sais pas où elles se trouvent ni comment en ajouter une.

    Donc là ça ne fonctionne pas, si je tape l'URL rewritée souhaitée :
    24-cars-ford-mustang-shelby par exemple --> j'arrive sur la page index.php?controller=cars?id_cars=24

    Je suis sur la bonne page php avec le bon controller et le bon template, il ne me manque plus qu'à rewrité les URLs.
    Où est-ce que l'on doit rajouter cette règle ?
     
  2. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Un petit up :(
     
  3. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    Les dernières versions Prestashop ont maintenant le même principe de réécriture que WordPress
    RewriteCond (.htaccess) + link_rewrite (BDD)

    Tu dois pouvoir ajouter une url réécrite en native, à mettre en fin de fichier (pas encore testé les urls natives mais ca ne devrait pas tarder) :

    # ~~end~~ garde ce commentaire, sinon Presta va le recompiler lors d'une maj du .htaccess
    <IfModule mod_rewrite.c>
    RewriteCond %{HTTP_HOST} ^www.ndd.com$
    RewriteRule ^([0-9]+)-cars-([a-zA-Z0-9-]*)$ cars.php?id_cars=$1 [L]
    </IfModule>
     
  4. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Merci Koogar, je suis impressionné que tu es l'esprit aussi clair à une heure aussi tardive :lol:

    Mais ce que tu me dis je l'ai déjà fait (Cf mon 1er post) :
    Donc l'URL rewritée est bien "traduite" en URL physique vers le bon fichier mais après il se passe un truc avec les controlleurs ou autres qui font que j'arrive sur index.php?controller=cars?id_cars=24 au lieu de rester sur l'URL rewritée

    Il faudrait savoir comment on intègre une nouvelle règle à la manière des produits ou catégories ?
     
  5. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    je pense qu'il faut ajouter une nouvelle route
    voir fichier /classes/Dispatcher.php

    'cars_rules' => array(
    'controller' => 'cars',
    'rule' => '{id}-cars-{rewrite}',
    'keywords' => array(
    'id' => array('regexp' => '[0-9]+', 'param' => 'id_cars'),
    'rewrite' => array('regexp' => '[_a-zA-Z0-9-\pL]*'),
    'meta_keywords' => array('regexp' => '[_a-zA-Z0-9-\pL]*'),
    'meta_title' => array('regexp' => '[_a-zA-Z0-9-\pL]*'),
    ),
    ),

    ensuite elle devrait se loader
     
  6. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    J'ai ajouté la règle dans le Dispatcher, je savais bien que sur cette version c'était le Dispatcher qui gérait tout ça !

    Lorsque j'arrive sur la page, j'ai l'erreur suivante
    Code:
    Dispatcher::createUrl() miss required parameter "id" for route "cars"
    Donc la règle est bien prise en compte et reliée aux bonnes pages, on progresse !

    Seulement il ne connait pas les variables {id} et {rewrite} vu qu'elles ne sont pas enregistré en BDD je pense.
    Comment je peux faire pour lui donner ses variables ? Je dois le faire dans le fichier controller ou ... ?

    Merci en tout cas pour ton aide
     
  7. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Bon je progresse, j'arrive désormais sur la bonne page avec la bonne URL. Voici ce que j'ai fait :

    1. Suppression de la règle rajoutée dans le .htaccess (car ça se traite en fait dans classes/Dispatcher.php)
    2. Ajout d'une règle de rewrite dans classes/Dispatcher.php
    Code:
    		'cars_rule' => array(
    			'controller' =>	'cars',
    			'rule' =>		'{id}-cars-{rewrite}',
    			'keywords' => array(
    				'id' =>				array('regexp' => '[0-9]+', 'param' => 'id_cars'),
    				'rewrite' =>		array('regexp' => '[_a-zA-Z0-9-\pL]*'),
    				'meta_keywords' =>	array('regexp' => '[_a-zA-Z0-9-\pL]*'),
    				'meta_title' =>		array('regexp' => '[_a-zA-Z0-9-\pL]*'),
    			),
    		),	
    
    Ensuite sur mon site j'ai un lien rewrité à la main du style /24-cars-ford-mustang-shelby. Lorsque l'on clique, on arrive sur l'URL physique /index.php?controller=cars&id_cars=24

    On reste sur l'URL rewritée /24-cars-ford-mustang-shelby SI et seulement SI :
    l'option Admin > SEO & URLs > Rediriger automatiquement vers l'URL canonique = Non

    J'ai mis du temps avant de comprendre pourquoi j'arrivais sur l'URL /index.php?controller=cars&id_cars=24 au lieu de /24-cars-ford-mustang-shelby. C'est en fait cette option dans l'admin qui redirige vers l'URL rewritée car ma règle de rewriting n'est pas ancrée nativement à Presta comme le sont les règles pour les produits ou les catégories par exemple

    Si je met l'option sur "Non", je reste bien sur la même page mais l'URL reste bien rewritée.
    Comment faire alors pour que cette fonction de redirection tienne compte de cette page ?
     
  8. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    Regarde la fonction canonicalRedirection dans le fichier FrontController.php, la solution doit pas etre loin
     
  9. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Ca avance, ça avance... J'ai réactivé le redirection canonique dans le BO et j'ai cherché à savoir comment ça marchais..

    Dans mon fichier CarsController.php, j'ai rajouté :
    Code:
    $this->canonicalRedirection($url);
    Avec $url est l'URL canonique complète souhaitée.

    Avec ce code, et en cliquant sur une URL rewritée comme il faut, j'arrive sur l'URL :
    http://www.example.com/24-cars-ford-mustang-shelby?id_cars=24

    Et le beau message "La page n'est pas redirigée correctement. Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas."

    Donc j'ai été faire un tour dans classes/controller/FrontController.php où il y a la fonction canonicalRedirection($url)

    Le fonctionnement est le même pour toutes les pages, alors j'ai rajouté id_cars à cette ligne :
    Code:
    $excluded_key = array('isolang', 'id_lang', 'controller', 'fc', 'id_product', 'id_category', 'id_manufacturer', 'id_supplier', 'id_cms', 'id_cars');
    Je ne sais pas trop à quoi sers cette ligne, mais si je n'y met pas "id_cars", j'arrive sur http://www.example.com/24-cars-ford-mustang-shelby?id_cars=24 et si j'y ajoute "id_cars" j'arrive sur http://www.example.com/index.php?controller=cars

    Donc soit j'ai l'id mais je l'ai aussi en paramètre d'URL, soit je ne l'ai plus du tout et du coup je suis redirigé sur la page http://www.example.com/index.php?controller=cars

    J'ai donc essayé de l'enlevé de mon "param" de ma règle dans le Dispatcher.php :
    Code:
    id' => array('regexp' => '[0-9]+', 'param' => 'id_cars'),
    Mais idem si je l'enlève d'ici j'arrive sur http://www.example.com/index.php?controller=cars
     
  10. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Bon alors du coup dans mon fichier CarsController.php je redirige bien vers l'URL seo
    Mais "quelque chose" redirige quand à lui vers http://www.example.fr/index.php?controller=cars&id_cars=24

    Ce qui fait que ça tourne en boucle... Il faut que je trouve ce "quelque chose".
    Apparemment ça n'est pas dans le Dispatcher.php mais alors où... ?

    En plus j'ai testé l'entête HTTP de http://www.example.com/24-cars-ford-mustang-shelby avec l'outil de WRI et ça me répond bien "OK code 200"

    Le rewriting/canonical est traité encore dans un autre fichier que Dispatcher.php et FrontController.php ?
    Dire qu'avant il suffisait d'une ligne dans le .htacess -_-'
     
  11. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    TATA YOYO !

    J'ai réussi à trouver ce "quelque chose" qui redirigeais vers l'URL non rewritée qui elle redirigeait vers l'URL rewritée qui elle redirigeait vers l'URL non rewritée qui elle...

    Pour résumer :
    _ le Dispatcher.php remplace le .htaccess => ajout de la nouvelle règle qui relie l'URL rewritée avec le bon controller
    _ le FrontController.php gère la redirection vers l'URL canonique (activable dans l'Admin > SEO & URLs)

    Dans mon nouveau controller CarsController.php, j'avais ajouté (très résumé) $this->canonicalRedirection($url_seo);

    Après une série de test et de comparaisons en PHP, j'utilisais cette fonction si URL SEO != URL courante

    Sauf qu'en fait, j'ai remarqué que les controlleurs catégories, produits, fabricants (et les autres dont l'URL est complètement rewritée sous Presta) redéclaraient cette fonction canonicalRedirection() au début du fichier, afin d'en faire une spécifique et pour ne pas utiliser celle du fichier FrontController.php

    J'ai donc ajouter la déclaration de cette fonction à mon controlleur et hop, adieu la boucle infinie :)

    Merci Koogar qui est la seule personne à m'avoir répondu sur WRI et le forum Prestashop y compris :lol:

    @++
     
  12. yvonig
    yvonig Nouveau WRInaute
    Inscrit:
    27 Mars 2007
    Messages:
    1
    J'aime reçus:
    0
    Puisque vous semblez familier de ce genre de chose, j'aimerai un coup de main ....
    sous prestashop 1.5.3 :
    J'ai réussit il y a quelques mois à faire un site multiboutique multilingue de 200 000 produits en huit langue, donc huit domaines :
    le prinicipale : http://www.accessoir...t-midiauto.com/

    et sept autres :
    http://www.acessorios-peugeot.com/
    http://www.accesorio...t-midiauto.com/
    http://www.peugeot-accessories.com/
    http://www.peugeot-m...sories.jpn.com/
    http://www.peugeot-m...ssories.cn.com/
    http://www.peugeot-m...ccessories.com/
    http://www.zubehor-p...t-midiauto.com/

    Sur deux de ces domaines
    http://www.peugeot-accessories.com/
    http://www.acessorios-peugeot.com/
    les commandes sont impossibles : page not found.
    la navigation fonctionne bien mais pas le passage de commande ...
    Lorsque j'ai constaté le problème, j'ai remarqué que c'était les deux seul domaine à avoir l'url principale sans le www, j'ai donc modifié cela et vidé tous les caches mais toujours le mème résultat.

    Sur la version française qui fonctionne correctement le lien 'identifiez vous pointe vers :
    http://www.accessoir....com/mon-compte
    qui redirige vers
    http://www.accessoir...back=my-account


    Sur la version anglaise qui ne fonctionne pas, le lien 'login' pointe vers
    http://www.peugeot-a....com/my-account
    mais n'est pas redirigé, c'est donc une erreur 404 qui s'affiche.

    Quelqu'un sait-il ou ça se passe cette redirection ?????
     
Chargement...
Similar Threads - Ajouter règle rewriting Forum Date
Comment rajouter des règles dans le htaccess de Joomla ? URL Rewriting et .htaccess 7 Février 2009
Comment ajouter plusieurs règles de réécriture ? URL Rewriting et .htaccess 11 Septembre 2008
[reglé] Javascript : ajouter un lien sur une image Développement d'un site Web ou d'une appli mobile 27 Mai 2008
Ajouter des liens sortants externes pour améliorer le référencement Netlinking, backlinks, liens et redirections 2 Mai 2022
Comment ajouter le tag GA4 sur 7000 fichiers ? Google Analytics 10 Avril 2022
Comment ajouter une URL en japonais dans Blogger ? Gmail, Google Talk, Blogger et Orkut 28 Novembre 2021
Quelle solutions pour ajouter un annuaire de membre Développement d'un site Web ou d'une appli mobile 21 Septembre 2021
Linkedin : comment ajouter une URL sur une image ? Autres réseaux sociaux 1 Juin 2021
Ajouter des liens externes : bonne pratique SEO ? Rédaction web et référencement 27 Avril 2021
Protection de site web : quel code ajouter dans htaccess ? URL Rewriting et .htaccess 5 Mars 2021
Comment ajouter un blog pour le SEO sur un site statique ? Demandes d'avis et de conseils sur vos sites 20 Janvier 2021
Ajouter des liens internes sitewide en cloaking Netlinking, backlinks, liens et redirections 2 Décembre 2020
Ajouter des lignes de rich snippet - KK Star Référencement Google 31 Mars 2020
WordPress Comment ajouter le CDN Cloudflare sur son site WP ? Administration d'un site Web 6 Février 2020
Ajouter une Opacité CSS sur une image en Background Développement d'un site Web ou d'une appli mobile 4 Février 2020
Ajouter un texte sur une carte Google Maps (JS) Développement d'un site Web ou d'une appli mobile 15 Janvier 2020
Ajouter style="display: block;" dans une div Développement d'un site Web ou d'une appli mobile 8 Janvier 2020
Ajouter les Rich Snippets sur Prestashop Débuter en référencement 28 Novembre 2019
Comment ajouter une page Facebook en tant que co-organisateur ? Facebook 22 Octobre 2019
Ajouter compte GA + ID de suivi existants Google Analytics 21 Octobre 2019