[résolu] tirets dans url rewriting ???

guigui48

Nouveau WRInaute
Bonjour à tous

Je continue mon petit site, et j'ai un petit souci concernant l'url rewriting :|

Explication :

j'ai fait une table famille_produit et une table produit

Pour faire simple :

FAMILLE_PRODUIT
idfamille
nom

PRODUIT
idproduit
idfamilleproduit
reference


Pour eviter les URL du genre cadeauenfant.php?id=4, je veux faire de l'url rewriting

Imaginons que j'ai une famille de produits "sac à dos" (id=4)

J'aimerai avoir l'adresse suivante : cadeau-enfant-sac-a-dos-4.php

Pour cela j'ai fait le code suivant :

Code:
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule cadeau-enfant-([0-9]+)-(.+)\.html$   /cadeau-enfant.php?id=$1 [L]


Je précise que j'ai créé un script permettant d'enlever les accents et d'ajouter des tirets à la place des espaces au sein de mon menu php

Est-ce que ce sont les tirets qui posent probleme ????
Merci de me répondre, en vous souhaitant un bon week-end :wink:
 

vitalizo

WRInaute impliqué
Re: tirets dans url rewriting ???

salut,

teste ca:
RewriteRule ^cadeau-enfant-([a-zA-Z0-9]+)\.html$ /cadeau-enfant.php?id=$1 [L]

Mais j'ai un doute sur ton url. A mon avis, il faut deux variables (l'id et le nom)

Je pense que ton url est mauvaise:
ca doit etre
cadeau-enfant.php?id=variable1&nom=variable2

avec une url comme ça tu pourrais faire de l'ur cadeau-enfant-sac-a-dos-4.html
 

guigui48

Nouveau WRInaute
Re: tirets dans url rewriting ???

Bonjour et merci pour ta réponse !

Mais cela ne fonctionne pas ! :cry:

En gros, imagine dans mon menu, je souhaite que

cadeau-enfant-sac-a-dos-4.html
amene à cadeau-enfant.php?id=4

ou que cadeau-enfant-poupee-6.html mène à cadeau-enfant.php?id=6


J'ai aussi essayé de la façon suivante :

Code:
RewriteRule ^cadeau-enfant-([a-zA-Z0-9]+)-([0-9]+)\.html$ /cadeau-enfant.php?ref=$1&id=$2 [L]

en admettant que ref=$1 ne sert à rien !!!

cela non plus ne fonctionne malheureusement pas

J'ai aussi essayé de pointer sur cadeau-enfant-sac_a_dos-4.html, cela ne marche pas non plus (en modifiant les - par des _)

Merci de votre aide !!!!
 

vitalizo

WRInaute impliqué
Re: tirets dans url rewriting ???

salut,

a mon avis comme j'ai dis plus haut, t'as un soucis dans ton url.
Ta variable id ne peut pas en même temps renvoyer vers un chiffre (ici le 4) et un termes (sac à dos).

Exemple
cadeau-enfant-sac-a-dos-4.html amene à cadeau-enfant.php?id=4
2 variables dans la première url alors qu'il n'y a qu'une dans la seconde.
 

guigui48

Nouveau WRInaute
Re: tirets dans url rewriting ???

vitalizo a dit:
salut,

a mon avis comme j'ai dis plus haut, t'as un soucis dans ton url.
Ta variable id ne peut pas en même temps renvoyer vers un chiffre (ici le 4) et un termes (sac à dos).

Exemple
cadeau-enfant-sac-a-dos-4.html amene à cadeau-enfant.php?id=4
2 variables dans la première url alors qu'il n'y a qu'une dans la seconde.
En effet, après avoir un peu réfléchi et t'avoir lu, j'ai fait de la façon suivante :

RewriteRule ^cadeau-enfant-([a-zA-Z0-9]+)-([0-9]+)\.html$ /cadeau-enfant.php?ref=$1&id=$2 [L]

mais meêm comme ça, cela ne fonctionne pas :?
 

guigui48

Nouveau WRInaute
Re: tirets dans url rewriting ???

Super, ça marche enfin, merci de ton aide !


Mais j'ai encore un bug :

Si je pointe là dessus : cadeau-enfant-sac-1.html, ça marche sans probleme

Par contre si je pointe sur cadeau-enfant-sac-a-dos-1.html ou sur cadeau-enfant-sac_a_dos-1.html, ça ne marche plus !!!

J'en reviens donc à la question : Les tiretsd ou underscores peuvent ils poser problème ? Que me conseillez vous comme séparateur de chaines de caractères ?

Je pensais au / mais n'y a t'il pas de risques de problèmes 404 au niveau des arboresecences (par exemple, il va chercher le fichier 1.html dans les dossier sac, situé lui meme dans le dossier a, etc.... mais ces dossiers n'existent pas)
 

vitalizo

WRInaute impliqué
Re: tirets dans url rewriting ???

non les tirets ne posent pas de pb (les underscore oui il me semble).
Pour ton pb, ca doit venir de ton script php qui remplace les espaces en tirets ( vu qu'il ne prend que sac dans l'ur)
 

guigui48

Nouveau WRInaute
Re: tirets dans url rewriting ???

Rebonjour, et merci de porter attention à mon probleme
Cependant, je pense que j'ai du mal m'expliquer, de ce fait, je vais te copier/coller le sql de la table et le script

Code:
CREATE TABLE IF NOT EXISTS `familleproduit` (
  `id` int(11) NOT NULL auto_increment,
  `nomproduit` varchar(255) NOT NULL,
  `nompage` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

INSERT INTO `familleproduit` (`id`, `nomproduit`, `nompage`) VALUES
(1, 'Sac à dos',  'sac-a-dos'),
(2, 'Sacs', 'sacs');
Là dedans, le champ nompage est la variable que j'utilise pour l'url rewriting (j'ai préféré passer par ce moyen là via un panneau admin plutot que générer un script de remplacement de caractères

En gros, je dois donc générer deux pages:
cadeau-enfant-sac-a-dos-1.html qui pointe sur cadeau-enfant.php?id=1
et
cadeau-enfant-sac-2.html qui pointe sur cadeau-enfant.php?id=2

Pour cela, voici le script utilisé pour mon menu :
Code:
$chercheartenfant = mysql_query("select* from familleproduit order by nomproduit asc");

while ($reqart = mysql_fetch_object($chercheartenfant))
	   {

echo "<p><a href=\"cadeau-enfant-$reqart->nompage-$reqart->id.html\">$reqart->nomproduit</a></p>";
		}
Probleme :

ca marche pour la famille sac, et non pour la famille sac à dos, certainement à cause des tirets


Voici le htaccess (je précise que les rewrite sont prises en compte par mon serveur)
Code:
RewriteRule ^cadeau-enfant-([a-zA-Z0-9]+)-([0-9]+)\.html$ /cadeau-enfant.php?ref=$1&id=$2 [L]
Dans ce htacess, la variale ref est facultative car non interprétée par mon code php
 

guigui48

Nouveau WRInaute
Re: tirets dans url rewriting ???

Ca y est !!!!

j'ai trouvé !
Je le mets si ça peut aider quelqu'un un jour :
en fait, il fallait simplement remplacer ([a-zA-Z0-9]+) par (.+) pour qu'il puisse prendre en compte tous les caractères

Merci de votre aide en tout cas et bon dev !


PS : par contre je n'arrive pas à éditer afin de mettre RESOLU
 

Discussions similaires

Haut