Comment transformer une url ?


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2291
Inscription: 20 Fév 2005

Comment transformer une url ?

Message le Mer Mar 19, 2008 13:16

Bonjour,

Je ne comprend pas comment transformer une url du type : "page-site.php?id=2&champ=REFERENCEMENT" en "le-titre-de-la-fiche.php" .

Je transmet une variable d'un page A vers page-site.php de cette façon:
Code: Tout sélectionner
echo '<a  href="page-site.php?id='.$id.'&champ='.$nomduchamp.'" >Fiche individuelle</a><br/>';


Dans page-site.php je recupère les info transmises par $_GET soit $id et $nomduchamp:
Code: Tout sélectionner
<?
$idtransmit=$_GET["id"];
$nomduchamp=$_GET["champ"];
?>

Ensuite je me connecte à ma BD et je fais ma requète avec la boucle:
Code: Tout sélectionner
.....
$query1 = mysql_query("SELECT * FROM  $nomduchamp WHERE id = $idtransmit");
...
ma boucle
etc...

Ma base est constitué de cette façon:
Code: Tout sélectionner
id | titre | description | url | BLABLA(qui en fait correspond à $nomduchamp)
1 | ici un titre | ici une description | ici une url | BLABLA
etc..

Donc, comment procéder pour incorporer le "titre" dans l'url?
Note: je suis débutant en php...
Merci

audit.referencement
WRInaute discret
WRInaute discret
 
Messages: 125
Inscription: 16 Fév 2008

Message le Mer Mar 19, 2008 13:36

Il faut que tu utilises la technique de l'URL rewriting, tu trouveras plein de choses à ce sujet sur le site et le forum.


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Mer Mar 19, 2008 13:42

si tu ne veux pas créer autant de fichier php que de titre, il faut ajouter une réécriture d'url dans le fichier .htaccess
Pour mettre le titre dans l'url, il faut avoir une table de correspondance avec comme clé le titre et les zones id et champ.
la règle .htaccess qui correspond est :
Code: Tout sélectionner
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.php$   /page-site.php?titre=$1 [L]

en début de page-site.php il faut lire la table avec comme clé le titre pour récupérer l'id et le champ


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2291
Inscription: 20 Fév 2005

Message le Mer Mar 19, 2008 14:42

Oui, l'url rewriting, j'ai déjà regardé de ce coté et j'avoue ne pas y comprendre grand chose!
Je pensais qu'il fallait en plus du rewriting une fonction pour ce faire.

webmasterlamogere, je suis un peut largué quand tu dis :"avoir une table de correspondance avec comme clé le titre et les zones id et champ".

Je vais essayer d'expliquer au mieux ma façon de procéder:

1-Je créé des tables automatiquement à l'aide d'un formulaire contenant id, titre,description,url,champ (champ correspond au nom de la table créé par formulaire soit $champ).

Quand une table est créé, j'insère en même temps et automatiquement dans une autre table nommé "tous_les_champs" comprenant "id" et "titre" ..id en auto_increment et dans "titre" la valeur de "champ" (soit $champ).

Donc:
-chaque base créée porte le nom donné par formulaire (soit $champ).
-le champ "champ" de chaque base contient le nom de la base (soit $champ).
-la base "tous_les_champs" contient tout les nom de table créé (soit $champ ).

Vous suivez ... ^^.
Ensuite, je fais comme dans mon code du 1er poste :
Code: Tout sélectionner
echo '<a  href="page-site.php?id='.$id.'&champ='.$nomduchamp.'" >Fiche individuelle</a><br/>';

etc..., etc..

Donc à la finale, il me manque quoi et ou pour pouvoir utiliser l'url rewriting afin d'avoir le titre de chaque fiche dans l'url?

Note2: J'essaye d'apprendre à coder php/mysql, soyez indulgent.. :lol:
Merci


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mer Mar 19, 2008 14:57

Ton lien tu le construit différement :
Code: Tout sélectionner
echo '<a  href="page-site-'.$id.'-'.$nomduchamp.'.php >Fiche individuelle</a><br/>';


Et ensuite ta règle de réecriture d'URL qui va prendre les URL commençant par page-site-*-*.php pour les transformer en page-site?id=123&champ=NomDuChamp.
Ainsi l'utilisateur (ou le robot Google...) ne voit que l'URL simplifiée mais ton serveur a lui toujours la même chose à traiter.


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2291
Inscription: 20 Fév 2005

Message le Mer Mar 19, 2008 15:16

Merci Bacteries,
Cependant aurais tu l'exemple des règles de rewriting correspondant à la forme de l'url que tu m'as donné ?
...Je vais allez lire les tuto la dessus ^^!


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Mer Mar 19, 2008 15:23

Si tu supprimes tes paramètres de l'url, il faut bien un moyen de les retrouver à partir du titre. il faut donc avoir un index unique qui fait correspondre le titre avec l'id et le champ. Il semble que ce soit la table tous_les_champs qui fasse ce lien.

Code: Tout sélectionner
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.php$   /page-site.php?titre=$1 [L]


Une petite explication de la règle de réécriture ci-dessus : la première ligne indique que tu veux utiliser le moteur de réécriture apache.
les deux lignes suivantes indique que tu ne veux pas que la règle ne soit appliquée à des répertoires ou des fichiers existants (la règle ne doit s'appliquer que si l'url n'existe pas)
la dernière permet d'afficher le contenu de la page /page-site.php?titre=n-importe-quel-titre si l'url demandée est sous la forme http://www.example.com/n-importe-quel-titre.php et cela de manière invisible sur ton navigateur.


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2291
Inscription: 20 Fév 2005

Message le Mer Mar 19, 2008 16:41

Ok, merci webmasterlamogere.

Donc en faisant:
Code: Tout sélectionner
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.php$   /page-site.php?titre=$1 [L]


Pour une url d'origine:
Code: Tout sélectionner
http://monsite.com/page-site.php?id=3&champ=TOTO


Sa me donne une url accessible du genre :
Code: Tout sélectionner
http://monsite.com/3.php

Le soucis est que la page est vide.
J'ai donc changé la ligne :
Code: Tout sélectionner
RewriteRule ^(.*)\.php$   /page-site.php?titre=$1 [L]

par:
Code: Tout sélectionner
RewriteRule ^(.*)-(.*)\.php$   /page-site.php?titre=$1&champ=$2 [L]

Ce qui me donne maintenant une url accessible du genre :
Code: Tout sélectionner
http://monsite.com/3-TOTO.php

Mais même punition, la page existe mais reste vide ...j'y comprend kedal !! 8O


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Mer Mar 19, 2008 17:04

j'ai compris que tu veux remplacer l'url :
Code: Tout sélectionner
http://monsite.com/page-site.php?id=3&champ=TOTO

par l'url :
Code: Tout sélectionner
http://monsite.com/titre-de-la-page.php

sachant qu'une table contient une correspondance entre l'id "3" + le champ "TOTO" et un titre "titre-de-la-page"



par contre si tu veux juste avoir une url :
Code: Tout sélectionner
http://monsite.com/3-TOTO.php

il te suffit de mettre la règle :
Code: Tout sélectionner
RewriteRule ^([0-9]*)-(.*)\.php$   /page-site.php?id=$1&champ=$2 [L]


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2291
Inscription: 20 Fév 2005

Message le Mer Mar 19, 2008 17:42

Merci webmasterlamogere :D .

Je continue dans ma lancé.
Vue que l'url de la page ne me convient pas étant donné que je récupère l'id et le nom du champ, je me suis dit que j'allais plutôt mettre le titre dans l'url.
J'ai donc ajouté $titre à mon url:
Code: Tout sélectionner
http://monsite.com/page-site.php?id=3&champ=TOTO&titre=montitre

Je me confronte à 2 problème:
1-Si mon titre comporte des espaces et des accents je me trouve alors avec une url du genre:
Code: Tout sélectionner
http://monsite.com/3-TOTO-Cr%C3%A9er%20un%20blog.php

Comment fait ton pour remplacer les espaces par des (-) et les caractères accentués (éàèç) par (eaec)?

2-Comment afficher dans l'url rewrité juste le titre pour obtenir une url du style:
Code: Tout sélectionner
http://monsite.com/Creer-un-blog.php


Bon, j'en demande peut être beaucoup mais j'essaye de comprendre.
Merci


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mer Mar 19, 2008 18:03

Alors : vu que tu as l'ID inutile de mettre dans ?id=3&champ=TOTO&titre=montitre le titre (je suppose que tu ne t'en sert pas pour retrouver ton contenu).

A partir de là libre à toi de transformer ton titre, soit simplement avec la fonction urlencode() soit de façon plus avancée. Pour avoir qqchose de bien.

Ensuite peut être est-il préférable pour toi de faire une url du type :
Code: Tout sélectionner
ID-ton_titre.php


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Mer Mar 19, 2008 18:10

Pour supprimer les caractères spéciaux il faut utiliser une petite fonction comme celle ci :
http://www.webrankinfo.com/forums/viewt ... htm#552814

pour n'avoir que le titre dans l'url il faut faire comme je t'ai dit là : http://www.webrankinfo.com/forums/viewt ... htm#869589

la seule difficulté c'est d'ajouter au début de page-site.php le code qui récupère l'id et le champ a partir du titre (sans les caractères spéciaux). c'est pour cela que je t'ai conseillé d'avoir une table qui fait le lien entre ce titre sans les caractères spéciaux et l'id+champ


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2291
Inscription: 20 Fév 2005

Message le Ven Mar 21, 2008 18:55

Merci webmasterlamogere,

J'ai donc utilisé ta technique de cette façon:
Code: Tout sélectionner
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)-(.*)-([0-9]*)\.php$  /page-site.php?rewriting=$1&champ=$2&id=$3 [L]


Ce qui me donne des url du genre:
Code: Tout sélectionner
http://monsite.com/titre-de-la-page-NOMCATEGORIE-id.php

Bon c'est un peut long mais je n'ai pas encore comprit comment afficher juste le titre sachant qu'au point de départ je transmet 3 variables dans l'url!!

J'essaye maintenant de rewriter une autre url qui donne:
Code: Tout sélectionner
/categorie.php?categorie=nomdelacatégorie

Note:nomdelacatégorie peut être tout en majuscule, tout en minuscule et séparé par des tirets bas(_).
J'ai éssayé:
Code: Tout sélectionner
RewriteRule ^(.*)\.php$   /categorie.php?categorie=$1 [L]
RewriteRule ^([a-z]*)\.php$   /categorie.php?categorie=$1 [L]
...

J'ai le droit soit à des 404 ou 500 :lol: ! Je ne comprend pas.


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Ven Mar 21, 2008 22:34

Code: Tout sélectionner
RewriteRule ^(.*)\.php$   /categorie.php?categorie=$1 [L]
RewriteRule ^([a-z]*)\.php$   /categorie.php?categorie=$1 [L]

les erreurs 500 c'est parce que ça boucle.
Il faut mettre :
Code: Tout sélectionner
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z-]*)\.php$   /categorie.php?categorie=$1 [L]

les deux conditions c'est pour éviter que des url qui existent ne match avec cette condition.
attention de bien mettre ces lignes en fin de fichier htaccess car cette règle est très générale.

pour éviter que deux règles ne se marchent dessus, le mieux est que tes url rewrité soit avec un préfixe : par exemple cat- ou c-


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2291
Inscription: 20 Fév 2005

Message le Ven Mar 21, 2008 23:16

Grand merci webmasterlamogere :D .

Enfin sa fonctionne, même si je n'ai pas tout comprit sur les règles d'écriture.
Mon htacces ressemble à sa maintenant:
Code: Tout sélectionner
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)-(.*)-([0-9]*)\.php$   /page-site.php?rewriting=$1&champ=$2&id=$3 [L]

RewriteRule ^cat-([a-zA-Z-]*)\.php$   /categorie.php?categorie=$1 [L]


Je "travail" en sous dossier d'un site existant pour tester cela et c'est un peut galère quand d'une, on y comprend pas grand chose dans le rewriting et de deux, quand on s'aperçoit qu'une simple ligne dans un htaccess peut foutre le bordel sur tout un site ... :lol:
Milles merci de ta patience et de tes explications :wink:

Comment transformer une url ?

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités