Toujours des problèmes de rewriting

  • Auteur de la discussion Auteur de la discussion fab27
  • Date de début Date de début
Nouveau WRInaute
Bonjour tout le monde,

J'ai toujours un problème d'url rewriting.

je m'explique

j'ai plusieurs categories et sous catégorie sur mon site.

avant les urls était du type

/monsite/index.php?cpath=45_21_85

le cpath ici represente la catégorie 45 puis sous catégories 21 et sous sous catégories 85.

maintenant j'ai ceci

/monsite/nom-categorie-45/nom-categorie-21/nom-categorie-85

tous marche trés bien. Et comme vous pouvez le voir j'utilise le - comme sépareteur

Mais voila le HIC.

si l'une de mes catégories posséde un - et bien elle n'est plus detecter correctement et je retourne sur l'index du site. Et j'ai le même problème avec tout les caractéres spéciaux comme &()' etc...

pour netoyer les urls j'utilise cette fonction

Code:
function mrpropre($chaine){
$tofind = " ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]'~$&%*@ç!?;,:/\^¨€{}|+-<>";
$replac = "-AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------------E-------";
$mrpropre =(strtr($chaine,$tofind,$replac));
$mrpropre = strtolower($mrpropre);
$mrpropre = ereg_replace("\"","-", $mrpropre);
$mrpropre = ereg_replace("[-]{2,}", "-", $mrpropre);
return $mrpropre;
}

Donc ma question est simple :D Comment puis je faire pour qu'une fois les urls nettoyers tout fonctionne. Et comment faire pour que si l'une de mes rubriques contient un - faire en sorte que cela fonctionne.

SVP.... J'ai besoin d'un grand coup de pouce...je galére avec cela depuis des mois.

Merci d'avance

++
fab
 
Nouveau WRInaute
Voici le contenu de mon htaccess

Code:
   RewriteEngine   on
   RewriteBase     /catalog/
   RewriteRule     newsletters        		- [L]
   RewriteRule     ^catalog$                   	/catalog/index.php [R=301,L]
   RewriteRule     ^catalog/$                   /catalog/index.php [R=301,L]
   RewriteCond     %{REQUEST_URI}             	!-d
   RewriteCond     %{REQUEST_URI}             	!^/$
   RewriteRule     ^(.*)-([0-9]+)$  		/catalog/product_info.php?products_id=$2 [L]
   RewriteRule     !\.(gif|php|css|jpg|png|ico|pdf|txt|js)$      /catalog/rewrite.php

Encore merci

++
fab
 
WRInaute discret
fab27 a dit:
Voici le contenu de mon htaccess

Code:
   RewriteEngine   on
   RewriteBase     /catalog/
   RewriteRule     newsletters        		- [L]
   RewriteRule     ^catalog$                   	/catalog/index.php [R=301,L]
   RewriteRule     ^catalog/$                   /catalog/index.php [R=301,L]
   RewriteCond     %{REQUEST_URI}             	!-d
   RewriteCond     %{REQUEST_URI}             	!^/$
   RewriteRule     ^(.*)-([0-9]+)$  		/catalog/product_info.php?products_id=$2 [L]
   RewriteRule     !\.(gif|php|css|jpg|png|ico|pdf|txt|js)$      /catalog/rewrite.php

et elle est ou la réécriture pour tes catégories? là je voit rien qui y ressemble 8O parce qui moi je verrais bien un truc dans le genre :

RewriteRule ^/monsite/(.*)-([0-9]+)/(.*)-([0-9]+)/(.*)-([0-9]+)/(.*).html$ /monsite/index.php?cpath=$2_$4_$6 [L]
a voir
 
Nouveau WRInaute
Rewrite de mes catégories et produit

Bien en fait le rewrite sur mon site ce fait à l'aide du fichier rewrite.php.
je peux te donner le code, mais il est un peu gros...

Code:
 include('includes/application_top.php');
  
 if ($REQUEST_URI == '/catalog/') {
   tep_redirect(tep_href_link(FILENAME_DEFAULT));
 }

 if ($REQUEST_TYPE == 'SSL') {
   $comparison_array = explode('/', HTTPS_SERVER . DIR_WS_HTTPS_CATALOG, 4);
 } else {
   $comparison_array = explode('/', HTTP_SERVER . DIR_WS_HTTP_CATALOG, 4);
 }
 $comparison = $comparison_array[3];

 $parts = explode('?', str_replace($comparison, '', $REQUEST_URI), 2);
 $list = explode('/', preg_replace(array('#^/#', '#/$#'), '', $parts[0]));
 if (sizeof($parts) == 2) {
   $parameters = explode('&', $parts[1]);
   foreach ($parameters as $pair) {
     $pieces = explode('=', $pair);
     $HTTP_GET_VARS[$pieces[0]] = $pieces[1];
   }
 }
 $current_category_id = 0;
 $cPath_array = array();
 $count = 0;
 foreach ($list as $piece_encoded) {
   $count++;
   $piece = urldecode(preg_replace(array('/[-]/', '/%20/'), array(' ', '%2F'),$piece_encoded));
   if ($piece == 'catalog') {
     continue;
   }
   $query_string = "select cd.categories_id from categories_description cd, categories c where cd.categories_id=c.categories_id and cd.categories_name='" . tep_db_input($piece) . "' and c.parent_id='" . (int)$current_category_id . "'";
   $category_query = tep_db_query("select cd.categories_id from categories_description cd, categories c where cd.categories_id=c.categories_id and cd.categories_name like '" . tep_db_input($piece) . "' and c.parent_id='" . (int)$current_category_id . "'");
   if ($category_array = tep_db_fetch_array($category_query)) {
     $cPath_array[]= $category_array['categories_id'];
     $breadcrumb->add(mrpropre($piece), tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', $cPath_array)));
     $current_category_id = $category_array['categories_id'];
   } else {
     if ($current_category_id != '0') {
       $parent_where_string = " and p2c.categories_id='" . (int)$current_category_id . "'";
     } else {
       $parent_where_string = '';
     }
     $product_query = tep_db_query("select pd.products_id from products_description pd, products_to_categories p2c, products p where p.products_id = pd.products_id and p.products_status = '1' and pd.products_id=p2c.products_id and pd.products_name='" . tep_db_input($piece) . "'" . $parent_where_string);
     if ($product_array = tep_db_fetch_array($product_query)) {
       if (sizeof($cPath_array) < 1) {
         $cPath = tep_get_product_path($product_array['products_id']);
         $cPath_array = explode('_', $cPath);
         for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
           $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
           if (tep_db_num_rows($categories_query) > 0) {
             $categories = tep_db_fetch_array($categories_query);        $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
           } else {
             break;
           }
         }
       } else {
         $cPath = implode('_', $cPath_array);
       }
       $breadcrumb->add(mrpropre($piece), tep_href_link(FILENAME_PRODUCT_INFO, 'cPath=' . $cPath . '&products_id=' . $product_array['products_id']));
       $HTTP_GET_VARS['products_id'] = $product_array['products_id'];
       $PHP_SELF_REWRITE = mrpropre(dirname($PHP_SELF)) . '/' . FILENAME_PRODUCT_INFO;
 $PHP_SELF = mrpropre($PHP_SELF_REWRITE);
       include(FILENAME_PRODUCT_INFO);
       exit();
     } else {
       $manufacturer_query = tep_db_query("select manufacturers_id from manufacturers where manufacturers_name='" . tep_db_input($piece) . "'");
       if ($manufacturer_array = tep_db_fetch_array($manufacturer_query)) {
         $breadcrumb->add(mrpropre($piece), tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', $cPath_array) . 'manufacturers_id=' . (int)$manufacturers_array['manufacturers_id']));
         $HTTP_GET_VARS['manufacturers_id'] = $manufacturer_array['manufacturers_id'];
         if ($count == sizeof($list)) {
           $HTTP_GET_VARS['filter_id'] = $current_category_id;
           $PHP_SELF_REWRITE = mrpropre(dirname($PHP_SELF)) . '/' . FILENAME_DEFAULT;
  $PHP_SELF = mrpropre($PHP_SELF_REWRITE);
           $cPath = implode('_', $cPath_array);
           $HTTP_GET_VARS['cPath'] = $cPath;
           include(FILENAME_DEFAULT);
           exit();
         } 
       } else {
         reset($list);
         /* tep_redirect(tep_href_link(FILENAME_ADVANCED_SEARCH_RESULT, 'keywords=' . implode('+', $list))); */
       }
     }
   }
 }
 $cPath = implode('_', $cPath_array);
 $HTTP_GET_VARS['cPath'] = $cPath;
 $PHP_SELF_REWRITE = mrpropre(dirname($PHP_SELF)) . '/' . FILENAME_DEFAULT;
 $PHP_SELF = $PHP_SELF_REWRITE;
 include(FILENAME_DEFAULT);
?>

Si tu as le courage de le lire en entier...Je t'en remercie d'avance

++
fab
 
WRInaute discret
non désolé j'ai pas le courrage et le temp de décodé

mais y pas besoin de tous cela,
tu génére ton url propre dans le html
/monsite/nom-categorie-45/nom-categorie-21/nom-categorie-85/???
il manque quelque chose a la fin non?

puis la ligne (cf message précedent) dans le htaccess et le tour est joué :wink:
 
Nouveau WRInaute
Ben non :) ...comment tu récupères les variables sinon...

as tu essayé :
RewriteRule ^([A-Za-z0-9-])-([0-9]+)$ /catalog/product_info.php?products_id=$2

ou

RewriteRule ^([A-Za-z0-9--])-([0-9]+)$ /catalog/product_info.php?products_id=$2

le caractère "-" ne sera compris qu'en fin d'ensemble je pense...

dis moi si ca marche...

ola
 
Nouveau WRInaute
Pour la fiche produit, je n'ai plus aucun problème qu'elle que soit l'ecriture du produit. car si j'ai un produit toto avec un id=28

j'aurai mon url comme ceci

/mon_site/nom_categorie_1/non_sous_categorie_1a/toto-28

comme cela j'arrive a retrouver quelques soit l'écriture le produit toto.

mais pour les rubriques je ne peux pas rajouter d'id car cela n'irais pas sur l'url.

Donc si une catégorie détient un - et bien ca plante.

Encore merci

++
fab
 
WRInaute discret
je te suis pas toujours :roll:

/mon_site/nom_categorie_1/non_sous_categorie_1a/toto-28.html

tu rajoute .html à la fin et avec

RewriteRule ^/mon_site(.*)-([0-9]+).html$ /mon_site/index.php?id_pro=$2 [L]

ca devrait marché pour ce truc
 
Discussions similaires
Haut