Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2011, 11h25   #1
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
Par défaut Url réécrite sur la page de destination

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
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 11h46   #2
Membre régulier
 
Guillaume M.
Inscription : décembre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Guillaume M.

Informations forums :
Inscription : décembre 2010
Messages : 59
Points : 82
Points : 82
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
gmarsay est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 11h47   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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") ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 11h49   #4
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
Citation:
Envoyé par gmarsay Voir le message
La réécriture d'url se fait du coté du serveur web, et non en PHP.

oui, je le savais déjà mais je cherchais une réponse à une question précise.....faire apparaître l'URL humaine dans la barre d'adresse de la page de destination.. ça j'arrive pas à faire..
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 11h52   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 806
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 806
Points : 1 520
Points : 1 520
Montres nous ton .htaccess et on pourra surement t'en dire plus sur ce qui ne va pas.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 13h18   #6
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
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>
mon.htaccess ressemble à ceci

Code :
1
2
3
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^voiture-([0-9]+)$  http://desport/liste_detail.php?ID=$1  [L]
donc le lien http://desport/voiture-58 va ouvrir la page http://desport/liste_detail.php?ID=58 ça fonctionne et ça me va..

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
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 13h30   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
1
2
3
4
5
RewriteCond %{QUERY_STRING} !(?:^|&)internal_redirect=1(?:&|$)
RewriteCond %{QUERY_STRING} (?:^|&)ID=(\d+)(?:&|$)
RewriteRule ^liste_detail\.php$ voiture-%1 [R=permanent,L]

RewriteRule ^voiture-([0-9]+)$ liste_detail.php?ID=$1&internal_redirect=1 [L]
(non testé)

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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 13h38   #8
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
Merci julp !!!!!!!!!!!

ça marche, je comprends pas encore trop pourquoi, mais ça marche......

c'est super , je te remercie....
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 13h45   #9
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
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]
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 13h53   #10
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
[quote=julp;6141482]
Code X :
1
2
3
4
5
RewriteCond %{QUERY_STRING} !(?:^|&)internal_redirect=1(?:&|$)
RewriteCond %{QUERY_STRING} (?:^|&)ID=(\d+)(?:&|$)
RewriteRule ^liste_detail\.php$ voiture-%1 [R=permanent,L]

RewriteRule ^voiture-([0-9]+)$ liste_detail.php?ID=$1&internal_redirect=1 [L]

Sinon, tout ce code là, ça fait quoi???
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 14h41   #11
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
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 du lien dans la page web
Code :
   <a href="vehicule-occasion-<?php echo $row_rsLast3['ID']; ?>-<?php echo utf8_encode($row_rsLast3['marque']); ?>-<?php echo utf8_encode($row_rsLast3['modele']); ?>">
ça marche, par contre ça plante si il y a un blanc dans un champ (Alfa Romeo par exemple)
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
Images attachées
Type de fichier : jpg php01.jpg (38,6 Ko, 2 affichages)
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 17h00   #12
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
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?
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 17h53   #13
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
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
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 18h03   #14
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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]
Ne pourrait-il pas suffire ?

Parce que vous ne pourriez même pas utiliser :
Code X :
RewriteRule ^voiture-occasion-(\d+)-[^-]+-[^-]+$ /liste_detail.php?ID=$1 [L]
Puisque votre séparateur (-) n'en est pas un, en réalité.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 18h08   #15
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
Merci d'avoir répondu

Citation:
Envoyé par julp Voir le message
Code X :
RewriteRule ^voiture-occasion-([0-9]*)- /liste_detail.php?ID=$1 [L]
Ne pourrait-il pas suffire ?

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
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 18h11   #16
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par Lionel_aw Voir le message
ben non, puisque je veux que les noms apparaissent dans l'URL... référencement oblige...
Euh, qu'est-ce qui vous en empêche ? La règle n'est pas ancrée sur la fin ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 19h32   #17
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
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 :
1
2
3
4
5
6
7
8
9
10
function accentOff($chaine)		{
	$chaine = str_replace("ë","e",$chaine);
	$chaine = str_replace("à","a",$chaine);
	$chaine = str_replace("ù","u",$chaine);
	$chaine = str_replace("é","e",$chaine);
	$chaine = str_replace("è","e",$chaine);
	$chaine = str_replace("ö","o",$chaine);
	$chaine = str_replace(" ",".",$chaine);
	return $chaine;
	}
je l'applique à mes champs avant de les intégrer dans l'URL, comme ça, je peux afficher Citroën dans la page et il y a Citroen dans l'URL comme ça ça plante plus...

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]


Citation:
Envoyé par julp Voir le message
Euh, qu'est-ce qui vous en empêche ? La règle n'est pas ancrée sur la fin ...
excuse, j'ai pas compris comment la règle n'était pas ancrée...
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 17h56   #18
Membre régulier
 
Guillaume M.
Inscription : décembre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Guillaume M.

Informations forums :
Inscription : décembre 2010
Messages : 59
Points : 82
Points : 82
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
gmarsay est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 20h16   #19
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 121
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : octobre 2008
Messages : 121
Points : 17
Points : 17
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.
Lionel_aw est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h58.


 
 
 
 
Partenaires

Hébergement Web