Gehasia Posted November 13, 2012 Share Posted November 13, 2012 (edited) Les règles de rewrite pour prestashop 1.4 et nginx ne fonctionnaient pas correctement pour plusieurs raisons : J'ai des urls avec accents (nouveauté de prestashop 1.5, les accents des noms de produits ne sont pas enlevés lors de l'enregistrement de link_rewrite en base de donnée) Il n'y a plus X controllers, mais plus que index.php auquel on passe une variable GET "controller=xxx". Donc en gros, avec les accents ça ne matchait pas les règles, et avec le coup des controllers ça rewritait vers des controllers voués à disparaitre. J'ai donc modifié les règles comme suit et les posts ici, ça pourrait peut-être en intéresser quelques uns: rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last; rewrite "^/c/([0-9]+)(\-[_a-zA-Z0-9-]*)/(.*)\.jpg$" /img/c/$1$2.jpg last; rewrite "^/c/([_a-zA-Z-]+)/(.*)\.jpg$" /img/c/$1.jpg last; rewrite "^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/(\P{M}\p{M}*)*\.jpg$" /img/p/$1-$2$3.jpg last; rewrite "^/([0-9]+)\-([0-9]+)/(\P{M}\p{M}*)*\.jpg$" /img/p/$1-$2.jpg last; rewrite "^/([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$1$2.jpg last; rewrite "^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$1$2$3.jpg last; rewrite "^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$1$2$3$4.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last; rewrite "^/([0-9]+)\-(\P{M}\p{M}*)+\.html(.*)$" /index.php?controller=product&id_product=$1$3 last; rewrite "^/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=category&id_category=$1$3 last; rewrite "^/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$" /index.php?controller=product&id_product=$2$4 last; rewrite "^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$" /index.php?controller=supplier&id_supplier=$1$3 last; rewrite "^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$" /index.php?controller=manufacturer&id_manufacturer=$1$3 last; rewrite "^/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=cms&id_cms=$1$3 last; rewrite "^/content/category/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=cms&id_cms_category=$1$3 last; rewrite "^/module/([_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)$" /index.php?fc=module&module=$1&controller=$2 last; rewrite ^/page-non-trouvee$ /index.php?controller=404 last; rewrite ^/adresse$ /index.php?controller=address last; rewrite ^/adresses$ /index.php?controller=addresses last; rewrite ^/authentification$ /index.php?controller=authentication last; rewrite ^/meilleures-ventes$ /index.php?controller=best-sales last; rewrite ^/panier$ /index.php?controller=cart last; rewrite ^/contactez-nous$ /index.php?controller=contact-form last; rewrite ^/bons-de-reduction$ /index.php?controller=discount last; rewrite ^/suivi-commande-invite$ /index.php?controller=guest-tracking last; rewrite ^/historique-des-commandes$ /index.php?controller=history last; rewrite ^/identite$ /index.php?controller=identity last; rewrite ^/manufacturers$ /index.php?controller=manufacturer last; rewrite ^/mon-compte$ /index.php?controller=my-account last; rewrite ^/nouveaux-produits$ /index.php?controller=new-products last; rewrite ^/commande$ /index.php?controller=order last; rewrite ^/details-de-la-commande$ /index.php?controller=order-follow last; rewrite ^/commande-rapide$ /index.php?controller=order-opc last; rewrite ^/avoirs$ /index.php?controller=order-slip last; rewrite ^/mot-de-passe-oublie$ /index.php?controller=password last; rewrite ^/promotions$ /index.php?controller=prices-drop last; rewrite ^/recherche$ /index.php?controller=search last; rewrite ^/plan-du-site$ /index.php?controller=sitemap last; rewrite ^/magasins$ /index.php?controller=stores last; rewrite ^/supplier$ /index.php?controller=supplier last; rewrite ^/page-not-found$ /index.php?controller=404 last; rewrite ^/address$ /index.php?controller=address last; rewrite ^/addresses$ /index.php?controller=addresses last; rewrite ^/authentication$ /index.php?controller=authentication last; rewrite ^/best-sales$ /index.php?controller=best-sales last; rewrite ^/cart$ /index.php?controller=cart last; rewrite ^/contacts$ /index.php?controller=contact-form last; rewrite ^/discount$ /index.php?controller=discount last; rewrite ^/guest-tracking$ /index.php?controller=guest-tracking last; rewrite ^/order-history$ /index.php?controller=history last; rewrite ^/identity$ /index.php?controller=identity last; rewrite ^/manufacturers$ /index.php?controller=manufacturer last; rewrite ^/my-account$ /index.php?controller=my-account last; rewrite ^/new-products$ /index.php?controller=new-products last; rewrite ^/order$ /index.php?controller=order last; rewrite ^/order-follow$ /index.php?controller=order-follow last; rewrite ^/quick-order$ /index.php?controller=order-opc last; rewrite ^/order-slip$ /index.php?controller=order-slip last; rewrite ^/password-recovery$ /index.php?controller=password last; rewrite ^/prices-drop$ /index.php?controller=prices-drop last; rewrite ^/search$ /index.php?controller=search last; rewrite ^/sitemap$ /index.php?controller=sitemap last; rewrite ^/stores$ /index.php?controller=stores last; rewrite ^/supplier$ /index.php?controller=supplier last; (j'ai aussi fait une pastebin : http://pastebin.com/W1Kpn4W9 ) C'est loin d'être parfait, je pense que ça risque déconner avec des "manufacturer" ou "supplier" avec des accents, mais comme je ne les utilises pas, je n'ai pas adapté spécifiquement les règles. En gros les règles du type : ([a-zA-Z0-9]*) ne match pas les caractères accentués en utf-8 Il faut soir les remplacer par un (.*) qui prend tout...soit par un (\P{M}\p{M}*)* utf ready (que je ne pense pas être parfait, mais moi et les regexp ça fait deux...) Edited November 13, 2012 by Gehasia (see edit history) 1 Link to comment Share on other sites More sharing options...
Broceliande Posted November 13, 2012 Share Posted November 13, 2012 Les règles de rewrite pour prestashop 1.4 et nginx ne fonctionnaient pas correctement pour plusieurs raisons : J'ai des urls avec accents (nouveauté de prestashop 1.5, les accents des noms de produits ne sont pas enlevés lors de l'enregistrement de link_rewrite en base de donnée) Il n'y a plus X controllers, mais plus que index.php auquel on passe une variable GET "controller=xxx". Donc en gros, avec les accents ça ne matchait pas les règles, et avec le coup des controllers ça rewritait vers des controllers voués à disparaitre. J'ai donc modifié les règles comme suit et les posts ici, ça pourrait peut-être en intéresser quelques uns: rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last; rewrite "^/c/([0-9]+)(\-[_a-zA-Z0-9-]*)/(.*)\.jpg$" /img/c/$1$2.jpg last; rewrite "^/c/([_a-zA-Z-]+)/(.*)\.jpg$" /img/c/$1.jpg last; rewrite "^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/(\P{M}\p{M}*)*\.jpg$" /img/p/$1-$2$3.jpg last; rewrite "^/([0-9]+)\-([0-9]+)/(\P{M}\p{M}*)*\.jpg$" /img/p/$1-$2.jpg last; rewrite "^/([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$1$2.jpg last; rewrite "^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$1$2$3.jpg last; rewrite "^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$1$2$3$4.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last; rewrite "^/([0-9]+)\-(\P{M}\p{M}*)+\.html(.*)$" /index.php?controller=product&id_product=$1$3 last; rewrite "^/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=category&id_category=$1$3 last; rewrite "^/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$" /index.php?controller=product&id_product=$2$4 last; rewrite "^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$" /index.php?controller=supplier&id_supplier=$1$3 last; rewrite "^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$" /index.php?controller=manufacturer&id_manufacturer=$1$3 last; rewrite "^/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=cms&id_cms=$1$3 last; rewrite "^/content/category/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=cms&id_cms_category=$1$3 last; (j'ai aussi fait une pastebin : http://pastebin.com/0jy1iCCh ) C'est loin d'être parfait, je pense que ça risque déconner avec des "manufacturer" ou "supplier" avec des accents, mais comme je ne les utilises pas, je n'ai pas adapté spécifiquement les règles. En gros les règles du type : ([a-zA-Z0-9]*) ne match pas les caractères accentués en utf-8 Il faut soir les remplacer par un (.*) qui prend tout...soit par un (\P{M}\p{M}*)* utf ready (que je ne pense pas être parfait, mais moi et les regexp ça fait deux...) Ben écoute moi je dis que c'est une excellente entrée en matière et que même si tu indiques que ça ne résoud pas tout , tu as le mérite d'apporter une solution . Congrats then ! Link to comment Share on other sites More sharing options...
Gehasia Posted November 13, 2012 Author Share Posted November 13, 2012 Ben écoute moi je dis que c'est une excellente entrée en matière et que même si tu indiques que ça ne résoud pas tout , tu as le mérite d'apporter une solution . Congrats then ! Hehe merci ! Pour la peine j'ai ajouté plein de règles manquantes dans le premier post, donc cela devrait être maintenant 100% fonctionnel (il manquait tous les rewritings du genre mon-compte ou historique-de-commandes etc.). J'ai vérifié au passage, prestashop 1.5 ne met pas les accents dans les urls pour les fabricants et marques, donc pas de soucis de ce côté-là comme je pouvais le penser. C'est actuellement en test sur ma plateforme, et pour le moment pas de soucis à priori. Y'a juste les règles pour les modules dont je ne suis pas certain (je ne sais pas comment prestashop passe les paramètres dans certains cas), donc ça marche avec les modules de paiements standards en tout cas, mais il est possible que ça ne passe pas pour certains modules frontend (mais bon la logique voudrait que ça passe). Je répète par contre, ce sont des règles pour prestashop >=1.5.0 1 Link to comment Share on other sites More sharing options...
Broceliande Posted November 13, 2012 Share Posted November 13, 2012 Comme quoi ça valait le coup de t'encourager ! Link to comment Share on other sites More sharing options...
otassel Posted February 13, 2013 Share Posted February 13, 2013 Hehe merci ! Pour la peine j'ai ajouté plein de règles manquantes dans le premier post, donc cela devrait être maintenant 100% fonctionnel (il manquait tous les rewritings du genre mon-compte ou historique-de-commandes etc.). J'ai vérifié au passage, prestashop 1.5 ne met pas les accents dans les urls pour les fabricants et marques, donc pas de soucis de ce côté-là comme je pouvais le penser. C'est actuellement en test sur ma plateforme, et pour le moment pas de soucis à priori. Y'a juste les règles pour les modules dont je ne suis pas certain (je ne sais pas comment prestashop passe les paramètres dans certains cas), donc ça marche avec les modules de paiements standards en tout cas, mais il est possible que ça ne passe pas pour certains modules frontend (mais bon la logique voudrait que ça passe). Je répète par contre, ce sont des règles pour prestashop >=1.5.0 Un grand merci à toi. Je pense que tu as fait gagner un temps précieux à plus d'un ! Link to comment Share on other sites More sharing options...
Nelson Posted May 1, 2013 Share Posted May 1, 2013 Je viens de monter un nouveau server pour un nouveau site. mais cette fois si avec les derniers version de nginx 1.2.8 et prestashop 1.5.4.1 J'ai problème avec cette entrée, nginx la refuse alors qu'avant avec les rules ci-dessus ca fonctionnais bien!? (\P{M}\p{M}*)* C'est peut etre du au ngx_pagespeed ?! mais sans les rules ca fonctionne bien Ou alors un changement sous Presstashop, car j'ai remarquer que les ID des langues avais changer et cela crée quelques perturbations. Si vous avez une mise à jours des ces rules pour prestashop 1.5.4.1 c'est Welcome! Link to comment Share on other sites More sharing options...
livindeadfr Posted August 12, 2014 Share Posted August 12, 2014 Bonjour, Ceci n'est pas une bonne solution de configuration avec nginx. Car cela obligera a modifier le fichier de configuration nginx a chaque ajout d'url s'implifié. Pour le rendre fonctionnelle : Il faut tout d'abord ajouter dans le fichier de configuration du pool php-fpm, env[HTTP_MOD_REWRITE] = "on" C'est la variable qu'attend prestashop pour tester si le rewrite est bien actif. Ensuite dans le fichier nginx, server ajouter : location / {try_files $uri $uri/ /index.php?q=$request_uri;} ainsi en cas de 404, il va tester le passage au controler et si une redirection existe elle sera appliquée. cdlt David Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now