Reecriture d'URL, pb de récupération d'une variable

WRInaute discret
Bonjour

J'ai un problème précis concernant de la réécriture d'URL

Je souhaite transformer des URL de type
/page.php?name=blo,blabla&num=98

en /blo,blabla.98.html

J'ai donc un .htaccess qui fait ceci :

RewriteRule ^(.*).(.[0-9]+).html$ /page.php?name=$1&num=$2

Je récupère ensuite la variable $_GET['num'].

Ca fonctionne uniquement quand le paramètre num est composé de deux chiffres.

Quand num est composée de 1 chiffre,ex
/blo,blabla.9.html
ça me met $num=.9
au lieu 9

Quand num est composée de 3 chiffre,ex
/blo,blabla.101.html
ça me met $num=01
au lieu de 101

Avec 2 chiffres, ça fonctionne.

Argh, je désespère
 
WRInaute discret
En effet, le premier point du bloc .(.[0-9]) ne sert a rien, ça change rien à la situation.
PAr contre le deuxième point du (.[0-9]) est nécessaire sinon il ne me prend qu'un chiffre.

Voici donc ou j'en suis ;

RewriteRule ^(.*)(.[0-9]+).html$ /page.php?name=$1&num=$2

et ça fonctionne pas mieux
 
WRInaute discret
Petite précision, il me prend d'ailleurs le . dans tous les cas, j'obtiens
$num== ".103"
ou $num== " .10"
ou $num== ".1"

je l'enlève ensuite en php de la variable $num pour avoir un chiffre propre.
 
WRInaute accro
et changer le . par un - pour separer ton chiffre, ca irait pas mieux ? car RewriteRule ^(.*)-([0-9]+).html$ /page.php?name=$1&num=$2
marche tres bien
 
WRInaute accro
pourquoi il n'y a pas de , dans l'expression de départ ?
ensuite un "." correspond à n'importe quel caractère. Pour que ça ne soit que pour un "." il faut l'échapper \.
 
WRInaute discret
Pour les tirets, mon souci est que de nombreuses pages ont été indexées par les robots avec des . dans les URL. Je ne veux pas perdre le bénéfice de ces pages en changeant toutes les URL des pages traitées selon cette méthode.

Je viens de me rendre compte de ce qui fonctionne pas, j'ai mis en place des articles 101,102 et 103 ce we, et voilà ma surprise... tout fonctionnait très bien avant..

Je suis vraiment à la recherche du pourquoi du comment : pourquoi cette règle n'admet une longueur de 2 caractères à ce satané paramètre num ???

Pour l'échappement du . le souci ne se pose plus, je l'ai enlevé de la règle, qui est comme suit :

RewriteRule ^(.*)(.[0-9]+).html$ /page.php?name=$1&num=$2

pour les mêmes résultats
 
WRInaute discret
Bon a force de tâtonner j'ai résolu le souci en mettant qomme règle :

RewriteRule ^(.*)\.([0-9]+).html$ /page.php?name=$1&num=$2


J'ai plus qu'a essayer de comprendre ce que j'ai fait.

Merci de vos réponses
 
WRInaute discret
Bon tout s'embrouille, ça marche pas finalement, j'avais mal rafraîvhi mon cache.

J'en suis là:

RewriteRule ^(.*)\.([0-9]+).html$ /mkt.php?name=$1&num=$2

blo,blabla.103.html me renvoie 03 pour num
blo,blabla.70.html me renvoie 70 pour num
blo,blabla.8.html me renvoie .8 pour num.
 
WRInaute discret
Non, c la réécrite qui m'envoie .8 :

J'en suis là:

RewriteRule ^(.*)\.([0-9]+).html$ /mkt.php?name=$1&num=$2

blo,blabla.103.html me renvoie 03 pour num
blo,blabla.70.html me renvoie 70 pour num
blo,blabla.8.html me renvoie .8 pour num.
 
WRInaute discret
e-kiwi a dit:
je viens de tester sur mon serveur, ca marche, regarde plutot du coté php comment tu le traite le resultat

Mon traitement:

Code:
$num=$_GET['num'];
$num=str_replace(".","",$num);
$query = mysql_query("select * from contenu where id = ".$num."");

...
 
WRInaute accro
pourquoi "$num=str_replace(".","",$num); " ?

ca ->
RewriteRule ^(.*)\.([0-9]+).html$ /mkt.php?name=$1&num=$2
avec
$query = mysql_query("select * from contenu where id = ".$_GET['num']."");
fonctionne sur mon serveur
 
WRInaute accro
non mais avec ta regle il ne doit pas te renvoyer de point. le probleme ne vient pas de ta regle. soit du coté de ton serveur (mutualisé ? dédié) soit ... je ne vois pas
 
WRInaute discret
Bon c'est l'embrouille totale. J'ai tout quitté, suis revenu qqes minutes plus tard, le .
htaccess en ligne que j'avais totalement modifié était revenu à la version de base.

Résultat, en effet ça fonctionne, la suppression du point ne sert plus à rien, argh tout ce temps pour ça ..

Merci e-kiwi
 
Discussions similaires
Haut