.htaccess & URL Rewriting : Regle
11 messages • Page 1 sur 1
Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics
.htaccess & URL Rewriting : Regle
Bonjour à tous,
j'ai besoin de vos lumières en ce qui concerne l'URL rewriting que je pratique déjà mais que je voudrais optimiser.
En effet je travail sur un site basé sur OSCOMMERCE. Ce site à donc des URL incompréhensibles. Aujourd'hui j'aimerais créer une règle générique de base qui s'adapte à mon menu qui est du type :
Code:
Catégorie principale :
index.php?cPath=22
Sous Catégorie de cette catégorie principale :
index.php?cPath=22_27
index.php?cPath=22_28
index.php?cPath=22_29
...
Autres catégories princiaples :
index.php?cPath=36
index.php?cPath=56
...
Leurs sous catégories fonctionnent de la même manière.
Actuellement pour le renommage de ces URL, je ne fait que citer à chaque fois l'URL d'origine et sa règle propre de renommage. Exemple :
Code:
RewriteRule (.*)luminaires\.html$ $1index.php?cPath=22 [L]
Ce qui fait que pour chaque menu et sous menu je suis obligé d'ecrire une regle de ce type qui se repete...
Je voudrais en fait faire qlq regele générique du type :
Tout les menu ayant l'ID 22 sont renommé luminaire.html et tout les sousmenu ayant l'ID 22 + un autre num sont renommé luminaires_mot_cle.html
Y a til une possibilité de créer une regle de ce type afin de ne pas générer un ficier .HTACCESS de 150 lignes ?
Merci d'avance pour vos réponses !
Alex.
j'ai besoin de vos lumières en ce qui concerne l'URL rewriting que je pratique déjà mais que je voudrais optimiser.
En effet je travail sur un site basé sur OSCOMMERCE. Ce site à donc des URL incompréhensibles. Aujourd'hui j'aimerais créer une règle générique de base qui s'adapte à mon menu qui est du type :
Code:
Catégorie principale :
index.php?cPath=22
Sous Catégorie de cette catégorie principale :
index.php?cPath=22_27
index.php?cPath=22_28
index.php?cPath=22_29
...
Autres catégories princiaples :
index.php?cPath=36
index.php?cPath=56
...
Leurs sous catégories fonctionnent de la même manière.
Actuellement pour le renommage de ces URL, je ne fait que citer à chaque fois l'URL d'origine et sa règle propre de renommage. Exemple :
Code:
RewriteRule (.*)luminaires\.html$ $1index.php?cPath=22 [L]
Ce qui fait que pour chaque menu et sous menu je suis obligé d'ecrire une regle de ce type qui se repete...
Je voudrais en fait faire qlq regele générique du type :
Tout les menu ayant l'ID 22 sont renommé luminaire.html et tout les sousmenu ayant l'ID 22 + un autre num sont renommé luminaires_mot_cle.html
Y a til une possibilité de créer une regle de ce type afin de ne pas générer un ficier .HTACCESS de 150 lignes ?
Merci d'avance pour vos réponses !
Alex.
- magic corp.
- WRInaute impliqué

- Messages: 425
- Inscription: Jeu Juin 17, 2004 9:56
Et pourquoi pas :
http://.../cat22-luminaires.html
Avec:
RewriteRule (.*)cat(.+)-.*\.html$ $1index.php?cPath=$2 [L]
Je suis pas un expèrt en rewrite, alors désolé si j'ai fait des erreurs dans ma règle de reécriture. J'ai aussi une boutique OsCommerce et j'utilisais cette metode pour les prduits, mais je ne l'ai pas encors passé en prod et j'ai plus acces à mon .htacces.
Peut-être que cette contrib pourra t'aidé
http://www.oscommerce.com/community/contributions,2796
-Magic-
http://.../cat22-luminaires.html
Avec:
RewriteRule (.*)cat(.+)-.*\.html$ $1index.php?cPath=$2 [L]
Je suis pas un expèrt en rewrite, alors désolé si j'ai fait des erreurs dans ma règle de reécriture. J'ai aussi une boutique OsCommerce et j'utilisais cette metode pour les prduits, mais je ne l'ai pas encors passé en prod et j'ai plus acces à mon .htacces.
Peut-être que cette contrib pourra t'aidé
http://www.oscommerce.com/community/contributions,2796
-Magic-
Merci pour ta réponse Magic !
ça m'aiguille un peu, néanmoins je me pose quelque questions avec cette regle :
Ici on ne lui precise pas quon renome cpath=22 en luminaire... ?
Si tu arrives à mettre la main sur ton fichier HTACCES et que tu peux me donner plus de precisions ça minterresse
Encore merci,
Alex.
ça m'aiguille un peu, néanmoins je me pose quelque questions avec cette regle :
- Code: Tout sélectionner
RewriteRule (.*)cat(.+)-.*\.html$ $1index.php?cPath=$2 [L]
Ici on ne lui precise pas quon renome cpath=22 en luminaire... ?
Si tu arrives à mettre la main sur ton fichier HTACCES et que tu peux me donner plus de precisions ça minterresse
Encore merci,
Alex.
- magic corp.
- WRInaute impliqué

- Messages: 425
- Inscription: Jeu Juin 17, 2004 9:56
Le problême si tu te base que sur le mots "luminaire", c'est que tu doit convertir "luminaire" en numero 22. Si tu veux faire ton rewrite avec un minimum de regle et surtout sans devoir rajouter une regle à chaque nouvelle catégorie, une solution serrai:
soit
donne
Seulement là, dans ton code tu doit gérer que si "cPath" est un text, il faud le trouver dans ta base de donnée (en faisant attention au formatage du text, par ex. les espaces, les accents et autre caractère spéciaux qu'il vaud mieux eviter dans une URL) pour optenir son ID.
Cette solution est valable mais je la trouve prise de tête à réaliser.
Dans le cas que je t'ai exposé dans mon présedant post, le rewrite en question n'est pas très diférant que celui cité plus haut, mais est plus simple à mettre en place, car je garde le "cPath" à l'interieur de mon URL et tu n'as plus besoin de te soucier du text qui suit.
ces trois URL renverrai sur la même catégorie.
Après c'est une question de temps et d'envie.
-Magic-
- Code: Tout sélectionner
RewriteRule (.*)/(.*)\.html$ $1/index.php?cPath=$2 [L]
soit
- Code: Tout sélectionner
http://.../luminaire.html
donne
- Code: Tout sélectionner
http://.../index.php?cPath=luminaire
Seulement là, dans ton code tu doit gérer que si "cPath" est un text, il faud le trouver dans ta base de donnée (en faisant attention au formatage du text, par ex. les espaces, les accents et autre caractère spéciaux qu'il vaud mieux eviter dans une URL) pour optenir son ID.
Cette solution est valable mais je la trouve prise de tête à réaliser.
Dans le cas que je t'ai exposé dans mon présedant post, le rewrite en question n'est pas très diférant que celui cité plus haut, mais est plus simple à mettre en place, car je garde le "cPath" à l'interieur de mon URL et tu n'as plus besoin de te soucier du text qui suit.
- Code: Tout sélectionner
http://.../cat22-luminaires.html
http://.../cat22-toto.html
http://.../cat22-mes_super_luminaires.html
ces trois URL renverrai sur la même catégorie.
Après c'est une question de temps et d'envie.
-Magic-
Ah oui je viens de comprendre ta logique !!
C'est super malin en fait comme système... c'est exactement ce qu'il me faut !
En gros je laisse le site tel qu'il est avec l'ID com identifiant (22) et j'ajoute le mot clé de mon choix derriere... c nikel car je peux l'adapter à n'importe quel catégorie ! Trop fort toi
)
Donc si je reste dans ta logique, pour renommé mes sous catégories du type :
index.php?cPath=22_29
La regle reste la meme ce qui pourrait donner :
Je trouve ça super mais je vois encore un petit soucis... Comment pusi-je faire dans mon code PhP pour modifier mon menu de tel sorte qu'il soit personnalisé selon la catégorie sur laquelle je clic ??
Car dans le premier cas ou l'on garde uniquement le cat22.html ce 'est pas un probleme, on modifie legerement le code pour transformer le cpath=22 en cat22.html et cette regle s'adapte pour tout le menu.
Mais dans le cas ou je choisi un mot clé different par menu, la il faut que je modifie enormement mon code PhP afin qu'il s'adapte non ?
Encore merci pour tes lumières...
Alex.
C'est super malin en fait comme système... c'est exactement ce qu'il me faut !
En gros je laisse le site tel qu'il est avec l'ID com identifiant (22) et j'ajoute le mot clé de mon choix derriere... c nikel car je peux l'adapter à n'importe quel catégorie ! Trop fort toi
Donc si je reste dans ta logique, pour renommé mes sous catégories du type :
index.php?cPath=22_29
La regle reste la meme ce qui pourrait donner :
- Code: Tout sélectionner
http://.../cat22_29-luminaires-lampes.html
Par exemple
Je trouve ça super mais je vois encore un petit soucis... Comment pusi-je faire dans mon code PhP pour modifier mon menu de tel sorte qu'il soit personnalisé selon la catégorie sur laquelle je clic ??
Car dans le premier cas ou l'on garde uniquement le cat22.html ce 'est pas un probleme, on modifie legerement le code pour transformer le cpath=22 en cat22.html et cette regle s'adapte pour tout le menu.
Mais dans le cas ou je choisi un mot clé different par menu, la il faut que je modifie enormement mon code PhP afin qu'il s'adapte non ?
Encore merci pour tes lumières...
Alex.
- magic corp.
- WRInaute impliqué

- Messages: 425
- Inscription: Jeu Juin 17, 2004 9:56
Voici le bout de code qui gére mon rewrite pour les produits mais c'est pratiquement le même pour gérer les categories.
Ce code si situer dans le fichier \includes\fonctions\html_output.php
Dans la fonction "tep_href_link("
Voici le code complet de ma fonction tep_href_link. Pour ce situer.
-Magic-
Ce code si situer dans le fichier \includes\fonctions\html_output.php
Dans la fonction "tep_href_link("
- Code: Tout sélectionner
// Test pour activé ou non le rewriting
if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) {
// Je limite ce rewrite pour le fichier "product_info.php"
if($page == 'product_info.php') {
// Je controle si le parametre "products_id" est présent
$l = ereg('[&\?/]?products_id[=/]([0-9]+)', $parameters, $m);
// Si oui on fait le rewrite
if ($l) {
// Je supprime le parametre en question de la liste des parametres
$parameters = ereg_replace("[&\?/]?products_id[=/][0-9]+[&/]?", "", $parameters);
// Et je garde le ID du produit
$select_item = $m[1];
// Petite requette dans la base de donnée pour avoir le nom du produit
$the_product_info_query = tep_db_query("select pd.language_id, p.products_id, pd.products_name, p.products_model from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . $select_item . "' and pd.products_id = '" . $select_item . "'" . " and pd.language_id ='1'");
$the_product_info = tep_db_fetch_array($the_product_info_query);
// Je supprime toutes les lettres accentué du nom du produit
$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
$the_product_info['products_name'] = strtr($the_product_info['products_name'],$tofind,$replac);
// Je convertie le nom en minuscule
$the_product_info['products_name'] = strtolower($the_product_info['products_name']);
// Je convertie tous se qui n'est pas alphabetique ou numerique en "_"
$the_product_info['products_name'] = ereg_replace("[^a-zA-Z0-9]", "_", $the_product_info['products_name']);
// Une petite boucle pour corriger les possibles suite de "_"
while (strstr($the_product_info['products_name'], '__'))
$the_product_info['products_name'] = str_replace('__', '_', $the_product_info['products_name']);
// Je supprime le dernier caractère si c'est un "_"
$the_product_info['products_name'] = ereg_replace("_$", "", $the_product_info['products_name']);
// Je crée le nom de la page
$page = str_replace('product_info', 'p'. $select_item . '_' . $the_product_info['products_name'] , $page);
}
}
}
Voici le code complet de ma fonction tep_href_link. Pour ce situer.
- Code: Tout sélectionner
// The HTML href link wrapper function
function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) {
global $request_type, $session_started, $SID, $HTTP_GET_VARS;
if (!tep_not_null($page)) {
die('</td></tr></table></td></tr></table><br><br><font color="#ff0000"><b>Error!</b></font><br><br><b>Unable to determine the page link!<br><br>');
}
if ($connection == 'NONSSL') {
$link = HTTP_SERVER . DIR_WS_HTTP_CATALOG;
} elseif ($connection == 'SSL') {
if (ENABLE_SSL == true) {
$link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG;
} else {
$link = HTTP_SERVER . DIR_WS_HTTP_CATALOG;
}
} else {
die('</td></tr></table></td></tr></table><br><br><font color="#ff0000"><b>Error!</b></font><br><br><b>Unable to determine connection method on a link!<br><br>Known methods: NONSSL SSL</b><br><br>');
}
if (!tep_session_is_registered('language') && isset($HTTP_GET_VARS['language'])) {
$select_langue = $HTTP_GET_VARS['language'];
$l = ereg('[&\?/]?language[=/][a-z][a-z]', $parameters, $m);
if ($l) {
$parameters = ereg_replace("[&\?/]?language[=/][a-z][a-z]", "", $parameters);
$select_langue = substr($m[0],-2);
}
if (tep_not_null($parameters)) {
$parameters .= "&language=" . $select_langue;
} else {
$parameters = "language=" . $select_langue;
}
}
if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) {
if($page == 'product_info.php') {
$l = ereg('[&\?/]?products_id[=/]([0-9]+)', $parameters, $m);
if ($l) {
$parameters = ereg_replace("[&\?/]?products_id[=/][0-9]+[&/]?", "", $parameters);
$select_item = $m[1];
$the_product_info_query = tep_db_query("select pd.language_id, p.products_id, pd.products_name, p.products_model from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . $select_item . "' and pd.products_id = '" . $select_item . "'" . " and pd.language_id ='1'");
$the_product_info = tep_db_fetch_array($the_product_info_query);
$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
$the_product_info['products_name'] = strtr($the_product_info['products_name'],$tofind,$replac);
$the_product_info['products_name'] = strtolower($the_product_info['products_name']);
$the_product_info['products_name'] = ereg_replace("[^a-zA-Z0-9]", "_", $the_product_info['products_name']);
while (strstr($the_product_info['products_name'], '__'))
$the_product_info['products_name'] = str_replace('__', '_', $the_product_info['products_name']);
$the_product_info['products_name'] = ereg_replace("_$", "", $the_product_info['products_name']);
$page = str_replace('product_info', 'p'. $select_item . '_' . $the_product_info['products_name'] , $page);
}
}
/*while (strstr($link, '&&')) $link = str_replace('&&', '&', $link);
$link = str_replace('?', '/', $link);
$link = str_replace('&', '/', $link);
$link = str_replace('=', '/', $link);
$separator = '?';*/
}
if (tep_not_null($parameters)) {
$link .= $page . '?' . tep_output_string($parameters);
$separator = '&';
} else {
$link .= $page;
$separator = '?';
}
while ( (substr($link, -1) == '&') || (substr($link, -1) == '?') ) $link = substr($link, 0, -1);
// Add the session ID when moving from different HTTP and HTTPS servers, or when SID is defined
if ( ($add_session_id == true) && ($session_started == true) && (SESSION_FORCE_COOKIE_USE == 'False') ) {
if (tep_not_null($SID)) {
$_sid = $SID;
} elseif ( ( ($request_type == 'NONSSL') && ($connection == 'SSL') && (ENABLE_SSL == true) ) || ( ($request_type == 'SSL') && ($connection == 'NONSSL') ) ) {
if (HTTP_COOKIE_DOMAIN != HTTPS_COOKIE_DOMAIN) {
$_sid = tep_session_name() . '=' . tep_session_id();
}
}
}
if (isset($_sid)) {
$link .= $separator . tep_output_string($_sid);
}
return $link;
}
-Magic-
Et ton code pour la page product_info est terrible aussi en passant, ça veux dire qu'en créant la même regle (que j'ai un peu modifié... dit moi si elle te parait juste) :
J'aurais grace a ton code PhP, une page du type :
Si c ça, c'est nikel, parceque javais meme pas osé renommer les pages produits... lol
Alex.
- Code: Tout sélectionner
RewriteRule (.*)*-(.+)\.html$ $1/product_info.php?products_id=$2 [L]
J'aurais grace a ton code PhP, une page du type :
- Code: Tout sélectionner
tabouret-225.html
Si c ça, c'est nikel, parceque javais meme pas osé renommer les pages produits... lol
Alex.
tu repond plus du coup
Je peux enlever le cat ? pour ne laisser que le numero du produit ou de la categorie pour donner ça :
ce qui donnerait :
http://.../luminaires-22.html
Je ne pense pa que ca pose probleme mais bon...
Je peux enlever le cat ? pour ne laisser que le numero du produit ou de la categorie pour donner ça :
- Code: Tout sélectionner
RewriteRule (.*)*-(.+)\.html$ $1index.php?cPath=$2 [L]
ce qui donnerait :
http://.../luminaires-22.html
Je ne pense pa que ca pose probleme mais bon...
- magic corp.
- WRInaute impliqué

- Messages: 425
- Inscription: Jeu Juin 17, 2004 9:56
Salut
Ma machine est HS depuis une semaine et j'ai plus accés en direct live à mes mail pour voir si il y des reponse sur les post auquel j'ai repondu. Désolé du retard
Le problême si tu vire le "cat" ou un autre prefixe (ou sufixe), c'est comment vas tu savoir si c'est un produit ou une catégorie.
Dans cette exemple, comment savoir le quel des deux est un produit ou une categorie :
luminaire-22.html
tabouret-225.html
Alors qu'avec un petit prefixe tu as deux regle bien distincte
Une catégorie
Un produit
Vois-tu où je veux en venir ?
-Magic-
Ma machine est HS depuis une semaine et j'ai plus accés en direct live à mes mail pour voir si il y des reponse sur les post auquel j'ai repondu. Désolé du retard
Le problême si tu vire le "cat" ou un autre prefixe (ou sufixe), c'est comment vas tu savoir si c'est un produit ou une catégorie.
Dans cette exemple, comment savoir le quel des deux est un produit ou une categorie :
luminaire-22.html
tabouret-225.html
Alors qu'avec un petit prefixe tu as deux regle bien distincte
Une catégorie
- Code: Tout sélectionner
luminaire-c22.html
RewriteRule (.*)*-c(.+)\.html$ $1/index.php?cPath=$2 [L]
Un produit
- Code: Tout sélectionner
tabouret-p225.html
RewriteRule (.*)*-p(.+)\.html$ $1/product_info.php?products_id=$2 [L]
Vois-tu où je veux en venir ?
-Magic-
ah la loose l'accès internet... j'ai été bloqué 1 mois lorsque jai changé de provider !!
je vois tout à fait ce que tu veux dire... c'est logique en plus, donc je vais garder un petit prefixe comme tu las mis CAD une lettre (c & p) pour ne pas avoir des URL trop longues !
Je viens de tester et ça marche nikel, je vais enfin pourvoir avoir un site avec des pages indexé correctement...
En tout cas merci beaucoup pour ton aide et tes conseils, j'y vois maintenant beaucoup plus clair !
Si tas besoins de quoi que se soit, hesites pas !
Alex.
je vois tout à fait ce que tu veux dire... c'est logique en plus, donc je vais garder un petit prefixe comme tu las mis CAD une lettre (c & p) pour ne pas avoir des URL trop longues !
Je viens de tester et ça marche nikel, je vais enfin pourvoir avoir un site avec des pages indexé correctement...
En tout cas merci beaucoup pour ton aide et tes conseils, j'y vois maintenant beaucoup plus clair !
Si tas besoins de quoi que se soit, hesites pas !
Alex.
11 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- 3ème partie de l'article .htaccess : les réécritures conditionnelles
- Tutoriel URL Rewriting
- l'URL Rewriting expliqué aux débutants
- Optimiser le référencement d'un forum phpBB : réécriture d'URL
- Article sur le fichier .htaccess
- L'URL Rewriting expliqué aux débutants
- Comment éviter les contenus dupliqués (avec/sans le www)
- Aperçu des différents types de redirection
- Découpage du forum webmaster en 2 forums
- url rewriting - htaccess et regle d'exclusion
- URL Rewriting : règle de rewriting qui change selon la cat ?
- [Réglé] htaccess, easyphp, et url rewritting
- Eviter qu'une URL change aprés une régle dans le htaccess ?
- pas de règle en URL rewriting
- [Reglé] URL Rewriting et Un débutant
- [reglé] URL Rewriting à la racine
- [Réglé] URL Rewriting et PhpMyAnnu
- [réglé] Url Rewriting et robots.txt
- problème de règle pour url rewriting
- règle url rewriting avec x variables
- [url rewriting] besoin d'aide[Réglé]
- Url rewriting , OVH et erreur 403 ( réglé )
- [Réglé]URL Rewriting : Erreur d'adresse relative
- [réglé]Changement d'hébergeur : URL rewriting ne marche plus
- Liste des backlinks
Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées. - Transformer des textes non cliquables en liens
Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

le forum