url rewriting et problème de %20

Nouveau WRInaute
Bonjour,
Je précise que je suis débutant en php.
Je construis un site en php et je m'essaie à l'url rewriting, pour un soucis d'efficacité avec google.
J'ai un soucis avec les %20 dans mes url.

Dans ma base, mes noms de catégories sont du type : "Avion de chasse"

code php :
Code:
$catdesc = $row["catdescription"];
$row["catname"] = ereg_replace(' ','+', $row["catname"]);  
       $fArray["URL"] = "<a href='cat-" .$row["catname"] . "-" .$row["catid"] . ".html' title='$catdesc'>";
       $fArray["/URL"] = "</a>";

Code template html :
Code:
&nbsp%URL%%CATNAME%%/URL%<br>

Mon .htacces :
Code:
Options FollowSymlinks
RewriteEngine on
RewriteRule ^cat-([a-z]+)-([0-9]+)\.html$  index.php?catname=$3&catid=$2  [L]

Et avec ça, je me retrouve avec des url du type :
...monsite.com/cat-Avion+de+chasse-2.html
Résultat :
Not Found 404
The requested URL ...monsite.com/cat-Avion+de+chasse-2.html was not found on this server.
D'ailleur ...monsite.com/cat-Avion de chasse-2.html ne fonctionne pas non plus.

Si je retire $catname (pour l'url), tout fonctionne bien, mais je l'ai rajoutée pour le référencement google, il n'y a que $catid qui "passe" sur une autre page.

Comment résoudre ce problème SVP ?
Merci par avance.
Snoopy52
 
J
JPC
Guest
remplace
Code:
RewriteRule ^cat-([a-z]+)-([0-9]+)\.html$  index.php?catname=$3&catid=$2  [L]
par
Code:
RewriteRule ^cat-([a-zA-Z ]+)-([0-9]+)\.html$  index.php?catname=$3&catid=$2  [L]

l'espace et les majuscules n'étaient pas autorisés par ta formule de rewriting dans le catname...
 
Nouveau WRInaute
Par contre, j'ai remplacer ton :
Code:
RewriteRule ^cat-([a-zA-Z ]+)-([0-9]+)\.html$  index.php?catname=$3&catid=$2  [L]

Par :
Code:
RewriteRule ^cat-([a-zA-Z]+)-([0-9]+)\.html$  index.php?catname=$3&catid=$2  [L]

J'ai retiré l'espace après Z sinon j'avais cette erreur :
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.

Sinon le code de mon précédent .htaccess fonctionne très bien avec les majuscules, mais dès que j'ai un nom de cat. avec des espaces (que j'ai remplacer par +) ça ne fonctionne plus.
 
J
JPC
Guest
de rien,
juste pour utoriser tous les caractères, il faudrait plutot mettre .* :
Code:
RewriteRule ^cat-(.*)-([0-9]+)\.html$  index.php?catname=$3&catid=$2  [L]
 
Nouveau WRInaute
Je ne comprends pas bien pourquoi :
...monsite/cat-Avion-1.html fonctionne très bien (j'affiche bien la sous-cat suivante)
et pas
...monsite/cat-Avion+de+chasse-2.html
 
J
JPC
Guest
je viens d'essayer
Code:
RewriteRule ^cat-(.*)-([0-9]+)\.html$  /index.php?catname=$3&catid=$2  [L]
sur mon serveur, j'ai pas de pb...
tu as quoi une erreur 500 ?
 
Nouveau WRInaute
le problème doit se situer au niveau de mes "+"
il ne peut pas trouver cat-Avion+de+chasse-2.html
si dans la base de données c'est
Avion de chasse sans les +
 
J
JPC
Guest
pour que tu aies une 404, il faut qu'il essaie de trouver une vraie page xyz.html, donc que l'url demandée ne soit pas interprêtée comme répondant à "^cat-(.*)-([0-9]+)\.html$"
sinon, tu n'aurais pas une 404 mais une page avec des erreurs mysql dedans...
 
J
JPC
Guest
le fait que tu aies une erreur 404 indique qu'il n'a pas trouvé la page que tu as demandé, il est donc allé chercher cat-Avion+de+chasse-2.html sur ton serveur (qui n'existe pas evidement), et pas
index.php?catname=avion%20de%20chasse&catid=2
qui elle existe et qu'il aurait du aller chercher s'il avait reconnu que

cat-Avion+de+chasse-2.html est de la forme ^cat-(.*)-([0-9]+)\.html$

je suis plus clair ?
 
Nouveau WRInaute
là oui, j'ai compris :)

Par contre, avec .*, même l'url avec un nom de cat. sans espace ne fonctionne plus, alors qu'avec a-zA-Z ça fonctionne.
 
J
JPC
Guest
heu, c'est quoi ton hébergement ? y'a peut-etre une spécification pour le joker (le point pour n'importe quel caractère) ?...
 
J
JPC
Guest
et en mettant un urlencode() autour de ton echo $catnamedans l'ecriture de tes url ?
Code:
<a href="cat-<?php echo urlencode($catname); ?>-<?php echo $catid; ?>.html">

et toujours
Code:
RewriteRule ^cat-(.*)-([0-9]+)\.html$  /index.php?catname=$3&catid=$2  [L]
 
Nouveau WRInaute
Bonjour :)
J'ai essayé d'adapter urlencode
Code:
$fArray["URL"] = "<a href='cat-"urlencode(.$row["catname"].)"-" .$row["catid"] . ".html' title='$catdesc'>";
Mais j'ai ce message :
parse error, unexpected T_STRING sur cette ligne
 
WRInaute occasionnel
Avec ça ça devrait être mieux :
Code:
$fArray["URL"] = "<a href='cat-".urlencode($row["catname"])."-" .$row["catid"] . ".html' title='$catdesc'>";
:wink:
 
J
JPC
Guest
heu, ben %2b ça signifie "+"comme quoi il interpretertait ton "avion de chasse" en "avion+de+chasse", je ne sais pas pourquoi mais bon, c'est un autre problème...
à priori, le problèmle initial, c'est sur le rewriting...
c'est
Code:
RewriteRule ^cat-(.*)-([0-9]+)\.html$  /index.php?catname=$3&catid=$2  [L]
que tu as en ce moment dans ton htaccess ?
 
Nouveau WRInaute
Oui presque, j'ai remis comme ça :
Code:
php_flag register_globals off

Options FollowSymlinks
RewriteEngine on
RewriteRule ^cat-([a-zA-Z]+)-([0-9]+)\.html$  index.php?catname=$3&catid=$2  [L]
Avec .* j'ai du 404 tout l'temps.
alors qu'avec a-zA-Z ça fonctionne avec un nom de catégorie, mais toujours pas avec 2
 
WRInaute occasionnel
Soit ut mets (.+), soit tu mets ([a-zA-Z%]+), sinon c'est normal que ça ne marche pas.
Je te conseille quand même d'utiliser (.+), il n'y a aucune raison pour que ça ne marche pas

:wink:
 
Nouveau WRInaute
Bon, avec a-zA-Z% ça fonctionne avec un mot dans le nom de cat.
Avec 2 mot ou + et espace j'ai :
cat-Avion%2Bde%2Bchasse-2.html avec un 404

Avec .+ j'ai :
cat-Avion-1.html et un 404 :roll:
 
Nouveau WRInaute
Ca fonctionne !!!!!! :D
Voila url
cat-Avion%2Bde%2Bchasse-2.html
9a me renvoit bien à la sous-cat. suivante.

Par contre, le %2B sera t-il bien interprété par google ?
Cela ne nuira t-il pas au référencement ?
 
J
JPC
Guest
je pense que le%2b dans l'url doit etre interprété comme un séparateur par google...
par contre, cette règle avec ^- ne fonctionnera pas si tu as un "-" dans ton $catname....
il faudrait peut-etre par sécurité mettre :
Code:
$fArray["URL"] = "<a href='cat-".urlencode(str_replace("-","_",$row["catname"]))."-" .$row["catid"] . ".html' title='$catdesc'>";
pour remplacer les éventuels - par des tirets bas...
 
J
JPC
Guest
:-( bon, ben je dois avoir ecrit une bétise, mais je ne vois encore pas laquelle...tu as bien 2 fermetures de parenthèses après $row["catname"] ?
 
Nouveau WRInaute
Code:
$fArray["URL"] = "<a href='cat-" .urlencode(str_replace("-","_",($row["catname"])). "-" .$row["catid"] . ".html' title='$catdesc'>";
[/code
 
J
JPC
Guest
ha !!! ça y est, vu !...
il y a un début de parenthèse en trop avant $row["catname"]
:-)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut