|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
Bonjour,
je suis en train de mettre en place une réécriture des URL sur un site en PHP mais un truc m'échappe: exemple: dans une page, je fabrique un lien du style /nom-article-12/ (avec le 12 extrait d'une requête de base de données) et à travers une règle de réécriture, je le fais pointer par exemple vers /site.com/liste_article.php?ID=12 ça marche!! par contre, est ce que je peux faire figurer dans la barre d'adresse de la page qui est atteinte le lien "humain" (/nom-article-12/) plutôt qe l'URL réelle? Je sais que c'est possible puisque c'est comme ça que ça fonctionne avec Wordpress, mais je n'arrive pas à le mettre en place. Merci |
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Guillaume M. Inscription : décembre 2010 Messages : 59 ![]() |
La réécriture d'url se fait du coté du serveur web, et non en PHP. Un peu de documentation pour les serveurs Apache :
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html http://apache.developpez.com/cours/urlrewriting/#L5 |
|
00
|
|
|
#3 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Pas clair ... Quelle est la règle en question ? Vous ne faites pas une redirection mais une réécriture interne (ie pas de flag R ni usage d'une URL mais un chemin pour la "redirection") ? Avez-vous bien changé vos liens (a href="nom-article-12" et non a href="liste_article.php?ID=12") ?
|
|
|
00
|
|
|
#4 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 806 ![]() |
Montres nous ton .htaccess et on pourra surement t'en dire plus sur ce qui ne va pas.
__________________
|
|
|
00
|
|
|
#6 | ||
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
bon voila un exemple de travail:
je créé un lien de test comme ceci dans ma page Code :
<a href="voiture-<?php echo $row_rsLast3['ID']; ?>" target="_blank">Lien test</a> Code :
mais ce que je veux c'est que quand la page http://desport/liste_detail.php?ID=58 est ouverte, je veux avoir http://desport/voiture-58 dans la barre d'adresse, comme c'est le cas avec Wordpress... comment fait on ça?? merci |
||
|
|
00
|
|
|
#7 | ||
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Il serait plus logique d'utiliser un chemin non une URL qui donne lieu a une redirection :
Code X :
RewriteRule ^voiture-([0-9]+)$ liste_detail.php?ID=$1 [L] Et il n'est pas véritablement possible de faire en sorte que liste_detail.php?ID=58 ne soit plus utilisable au niveau de la réécriture, ça oblige à une "bidouille" de ce genre : Code X :
Enfin, Wordpress ne doit pas gérer cela directement par la réécriture, mais par un script vers lequel tout est renvoyé. Ce qui serait, dès lors, totalement différent. |
||
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
Merci julp !!!!!!!!!!!
ça marche, je comprends pas encore trop pourquoi, mais ça marche...... c'est super , je te remercie.... |
|
|
00
|
|
|
#9 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
ah, j'avais pas encore vu l'edit de ton message.....
par contre si ça marche en local en utilisant ta règle RewriteRule ^voiture-([0-9]+)$ liste_detail.php?ID=$1 [L] , j'ai un message d'erreur sur le site réel, comme ceci The requested URL /AMENFRHOME/hostnd/8/9/8/898110/www/htdocs/web/liste_detail.php was not found on this server. EDIT: ça marche en fait en rajoutant le slash de la racine du site devant l'adresse comme ceci RewriteRule ^voiture-([0-9]+)$ /liste_detail.php?ID=$1 [L] |
|
|
00
|
|
|
#10 | ||
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
[quote=julp;6141482]
Code X :
Sinon, tout ce code là, ça fait quoi??? |
||
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
J'ai encore un peu besoin de votre aide.....
j'ai modifié ma règle Rewrite et mes liens de cette façon: Code :
RewriteRule ^vehicule-occasion-([0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ /liste_detail.php?ID=$1 [L] Code :
<a href="vehicule-occasion-<?php echo $row_rsLast3['ID']; ?>-<?php echo utf8_encode($row_rsLast3['marque']); ?>-<?php echo utf8_encode($row_rsLast3['modele']); ?>"> on peut lui dire dans l'expression régulière qu'il peut y avoir des espaces ? et ça déconne aussi si il y a des accents ( Citroën par exemple), ça affiche des caractères cabalistiques du genre The requested URL /vehicule-occasion-51-Citroën-C4 was not found on this server. alors que le lien est bien formé dans la barre d'état.... merci |
|
|
00
|
|
|
#12 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
j'avais résolu mon problème d'accent avec cette règle
RewriteRule ^voiture-occasion-([0-9]+)-([a-zA-Z0-9àùéèäë\.\-\ ]+)-([a-zA-Z0-9àùéèäë\.\-\ ]+)$ /liste_detail.php?ID=$1 [L] ça marche sur le site réel www.desport-auto.com mais voilà que tout d'un coup, sans crier gare la règle ne fonctionne plus en local... en faisant par élimination, je m'aperçois que c'est quand j'introduis les accents que ça ne marche plus, il m'indique qu'il y un erreur sur le serveur: 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. ma règle est elle correcte? |
|
|
00
|
|
|
#13 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
Au secours je vais péter un câble ....
ma règle ne fonctionne plus si des caractères accentués comme le à ça fonctionne avec ë mais pas avec à par exemple cette règle fonctionne RewriteRule ^voiture-occasion-([0-9]*)-([a-zA-Z0-9ë\.\-\ ]*)-([ëa-zA-Z0-9\.\-\ ]*)$ /liste_detail.php?ID=$1 [L] (j'ai mis en gras les caractères spéciaux) mais je remplace le ë par un à cette règle fait planter le serveur, la page ne s'affiche pas RewriteRule ^voiture-occasion-([0-9]*)-([a-zA-Z0-9à\.\-\ ]*)-([ëa-zA-Z0-9\.\-\ ]*)$ /liste_detail.php?ID=$1 [L] pourtant ça a marché pendant 2h avant, j'y comprend plus rien. au secours |
|
|
00
|
|
|
#14 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Les caractères variables (par rapport à l'encodage), comme les caractères accentués, sont possibles dans une URL mais vous dépendez ensuite : d'une part de la manière dont l'URL est transmise (son encodage) et, d'autre part, de l'implémentation du serveur.
Conclusion : oubliez les accents (+/- translitération) et/ou généralisez. Code X :
RewriteRule ^voiture-occasion-(\d+)- /liste_detail.php?ID=$1 [L] Parce que vous ne pourriez même pas utiliser : Code X :
RewriteRule ^voiture-occasion-(\d+)-[^-]+-[^-]+$ /liste_detail.php?ID=$1 [L] |
|
|
00
|
|
|
#15 | |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
Merci d'avoir répondu
Citation:
ben non, puisque je veux que les noms apparaissent dans l'URL... référencement oblige... ou alors faudrait il que dans ma page web, par exemple, je remplace ë par e, é par e , à par a , etc??? Je crois que je vais faire une pause, j'ai la tête comme un chaudron lol |
|
|
|
00
|
|
|
#16 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
|
|
|
00
|
|
|
#17 | ||
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
Julp, j'ai suivi ton conseil.... j'ai éliminé les accents dans tout ce que je mets dans le href du lien..
j'ai créé une fonction comme ceci pour enlever les accents et remplacer les espaces par des points Code :
c'est peut être pas la meilleure solution, mais ça marche. voici ma dernière règle de Rewrite. RewriteRule ^voiture-occasion-([0-9]*)-([a-zA-Z0-9\.]*)-([a-zA-Z0-9\.]*)$ /liste_detail.php?ID=$1 [L] excuse, j'ai pas compris comment la règle n'était pas ancrée... |
||
|
|
00
|
|
|
#18 |
|
Membre régulier
![]() Guillaume M. Inscription : décembre 2010 Messages : 59 ![]() |
Avec les frameworks symfony et Django (je sais pas si Wordpress utilise le même principe, mais surement) on utilise des "slug". C'est une méthode qui permet de convertir une chaine de texte en une chaine pouvant être utilisé dans une url.
Exemple : Citroën -> citroen, Alpha Romeo -> alpha-romeo Le slug est enregistré directement dans un champs la base de données et il peut être personnaliser (ne pas être identique à la chaine de base) dans les cas ou une simplification s'impose. Un exemple de fonction permettant de générer des slugs : http://www.waibdev.com/developpement...aire-des-slugs |
|
00
|
|
|
#19 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 121 ![]() |
Merci guillaume, mais là ma solution semble fonctionner
j'ai remplacé les espaces par des points car le tiret est utilisé dans ma chaine rewrite mais en fait je me suis aperçu que comme je ne récupère que le "$_GET['ID']", ce qu'il y a après importe peu dans ce cas. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com