rewriting de top recherches

WRInaute occasionnel
BOnjour,
dans mon annuaire, j'ai ajouté une fonction Top recherche pour savoir ce que recherchent en premier lieu les internautes sur mon site. cette pages est accessible ici : http://www.ateliermagique.com/annuaire/ ... erches.php

j'ai écrit sous forme de lien chacun des mots les plus recherchés afin que les gens puissent aussi voir les résultats. pour cela, j'ai utilisé la page search.php de mon annuaire PHPMYANNU à laquelle je passe le mot en paramètre, ce qui me donne une URL du type :

http://www.ateliermagique.com/annuaire/ ... n%20cheval

j'aimerais transfomé cet url en quelque chose du genre :
http://www.ateliermagique.com/annuaire/ ... heval.html

comment faire ? j'essaie depuis deux jours à l'aide de ce forum sans succès...

sachant que mon annuaire est déjà URL rewrité avec comme code :
Code:
Options +FollowSymlinks
RewriteEngine on

RewriteRule ^art-([0-9]+)\.html$ index.php?cat_id=$1
RewriteRule ^art-([0-9]+)-([0-9]+)\.html$ index.php?cat_id=$1&page=$2
RewriteRule ^goto-([0-9]+)\.html$ goto.php?id=$1

voici le code que j'avais essayé d'ajouter mais qui fait planter le serveur...
Code:
RewriteRule ^([a-z\-]+)_([A-Za-z0-9_% \.\+\-\*~'\" ]*)\.html$ search.php?recherche=$1

J'ai trois autres questions :
- comment transformer les cactères spéciaux ?
- a quoi sert le [L] derrière une règle de réecriture ?
- lorsque on a url-rewrité, l'appel des pages doit-il etre modifié ou l'ancienne URL fonctionne-t-elle encore ?

Merci pour votre aide.
Jerome
 
WRInaute occasionnel
Bonjour,
n'ayant pas eu de réponse, je suppose que mon message était trop général. donc je simplifie ma question :

si je veux url rewriter une url du type search.php?recherche=chevalet, en chevalet.html, est-ce correct de mettre ceci dans mon htacess ?
RewriteRule ([0-9]+)\.html$ search.php?recherche=$1

j'obtiens un message d'erreur lorsque je teste (404)
 
WRInaute discret
Le [L] dit qu'il faut arrêter d'appliquer les règles si celle-ci est activée.
([L] = Last)
Donc tu devrais le mettre à la fin de chaque règle.
Il y a d'autres code que tu trouveras ici :
http://httpd.apache.org/docs/misc/rewriteguide.html

Si tu as de l'aphanumérique en entrée
Code:
RewriteRule ([0-9]+)\.html$ search.php?recherche=$1
ne marchera pas car il ne prendra que du numérique.
Par contre
Code:
RewriteRule ([a-zA-Z0-9]+)\.html$ search.php?recherche=$1
devrait fonctionner correctement.

Pour en revenir à ta première demande
Code:
RewriteRule ^([a-z\-]+)_([A-Za-z0-9_% \.\+\-\*~'\" ]*)\.html$ search.php?recherche=$1
comporte des choses inutiles dnas la mesure où tu supprime les espaces (%20).
Donc, ceci devrait suffire:
Code:
RewriteRule ^([a-z\-]+)_([A-Za-z0-9\-]*)\.html$ search.php?recherche=$1
(Je ne suis pas sûr qu'il soit nécessaire de mettre des "\" devant les "-")
 
WRInaute occasionnel
effectivement, ca marche mieux en prenant l'alphanumérique aussi ! :wink:
merci pour le tuyau!
voici la ligne que j'ai à présent :

Code:
RewriteRule ^([a-zA-Z0-9]+)\.html$   search.php?recherche=$1 [QSA,L]

je n'ai plus qu'un problème : en php, comment remplacer le %20 en "_" dans la construction de mes URLs ?
 
WRInaute occasionnel
Pulsar-san a dit:
Code:
RewriteRule ^([a-z\-]+)_([A-Za-z0-9\-]*)\.html$ search.php?recherche=$1

quelle est la différence entre ([a-z\-]+) avec un "+" et ([A-Za-z0-9\-]*) avec un "*" ?

et pourquoi faut-il mettre un "$" après html ?
en fait on l'a compris je suis novice en rewiting et je n'ai pas trouvé un guide sur wri...
merci pour le lien en anglais.
 
WRInaute discret
La différence entre "." et "*"
"." = 1 ou plus caractères
"*" = 0 ou plus caractères

"^" = début de la chaine à transformer
"$" = fin de la chaine à transformer

Pour remplacer les espaces, ça dépend comment ils sont enregistrés dans ta base de données, est-ce " " ou bien "%20" ?
Pour traiter les deux:
Code:
ereg_replace("[:space:]|[%20]", "_", $tachaine);
Je crois que c'est ça.
Je ne sais plus si :space: concerne l'un ou l'autre ou bien les deux :?
 
WRInaute occasionnel
je ne sais pas comment ils sont enregistrés. Il suffit que je regarde dans phpmyadmin ?
en tous cas, merci pour le tuyau. donc je mets cela dans mon url ce soir.
Merci!
 
WRInaute occasionnel
Bonjour
en regardant dans ma base de donnée, les espaces sont stockés avec des " ". j'ai donc utilisé la fonction ci-dessus :
Code:
$expression_traitee = ereg_replace(' ','_',$row["expression"]);

le résultat est le bon : http://www.ateliermagique.com/annuaire/ ... erches.php. dès que j'ai plusieurs mots dans expression, le lien construit est bien mot1_mot2.html.

Par contre que dois-je ajouter dans mon .htaccess pour tenir compte des recherches à deux mots ?
aujourd'hui, j'ai cela :
Code:
RewriteRule ^([a-zA-Z0-9]+)\.html$   search.php?recherche=$1 [QSA,L]
,
ce qui permet de transformer cheval.html en search.php?recherche=cheval

mais dès que j'ai une recherche à au moins 2 mots, j'obtiens une erreur 404.
donc quelle règle ajouter dans le fichier pour que mot1_mot2.html donne search.php?recherche=mot1 mot2 ?

Merci encore...
Jerome
 
WRInaute occasionnel
non je n'ai pas trouvé. donc l'astuce que j'utilise est la suivante :
si qqun cherche 'dessin cheval', je log dessin_cheval et 'dessin cheval' dans mon top recherche. j'affiche le second mais en traitement, j'utilise le premier...

lorsque la page dessin_cheval.html est appelée, son premier traitement est de transformer 'dessin_cheval' en 'dessin cheval'

voilà
 
Discussions similaires
Haut