url rewriting et problème de %20

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
 
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...
 
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.
 
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]
 
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
 
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 ?
 
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 +
 
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...
 
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 ?
 
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.
 
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) ?...
 
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]
 
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
 
Avec ça ça devrait être mieux :
Code:
$fArray["URL"] = "<a href='cat-".urlencode($row["catname"])."-" .$row["catid"] . ".html' title='$catdesc'>";
:wink:
 
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 ?
 
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
 
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:
 
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:
 
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 ?
 
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...
 
:-( 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"] ?
 
Code:
$fArray["URL"] = "<a href='cat-" .urlencode(str_replace("-","_",($row["catname"])). "-" .$row["catid"] . ".html' title='$catdesc'>";
[/code
 
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