Comment transformer une url ?

  • Auteur de la discussion Auteur de la discussion tryan
  • Date de début Date de début
WRInaute passionné
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:
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:
<? 
$idtransmit=$_GET["id"];
$nomduchamp=$_GET["champ"];
?>
Ensuite je me connecte à ma BD et je fais ma requète avec la boucle:
Code:
.....
$query1 = mysql_query("SELECT * FROM  $nomduchamp WHERE id = $idtransmit");
...
ma boucle
etc...
Ma base est constitué de cette façon:
Code:
 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
 
WRInaute passionné
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:
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
 
WRInaute passionné
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:
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
 
WRInaute passionné
Ton lien tu le construit différement :
Code:
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.
 
WRInaute passionné
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 ^^!
 
WRInaute passionné
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:
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.
 
WRInaute passionné
Ok, merci webmasterlamogere.

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

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

Sa me donne une url accessible du genre :
Code:
http://monsite.com/3.php
Le soucis est que la page est vide.
J'ai donc changé la ligne :
Code:
RewriteRule ^(.*)\.php$   /page-site.php?titre=$1 [L]
par:
Code:
RewriteRule ^(.*)-(.*)\.php$   /page-site.php?titre=$1&champ=$2 [L]
Ce qui me donne maintenant une url accessible du genre :
Code:
http://monsite.com/3-TOTO.php
Mais même punition, la page existe mais reste vide ...j'y comprend kedal !! 8O
 
WRInaute passionné
j'ai compris que tu veux remplacer l'url :
Code:
http://monsite.com/page-site.php?id=3&champ=TOTO
par l'url :
Code:
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:
http://monsite.com/3-TOTO.php
il te suffit de mettre la règle :
Code:
RewriteRule ^([0-9]*)-(.*)\.php$   /page-site.php?id=$1&champ=$2 [L]
 
WRInaute passionné
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:
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:
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:
http://monsite.com/Creer-un-blog.php

Bon, j'en demande peut être beaucoup mais j'essaye de comprendre.
Merci
 
WRInaute passionné
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:
ID-ton_titre.php
 
WRInaute passionné
Pour supprimer les caractères spéciaux il faut utiliser une petite fonction comme celle ci :
https://www.webrankinfo.com/forum/viewt ... htm#552814

pour n'avoir que le titre dans l'url il faut faire comme je t'ai dit là : https://www.webrankinfo.com/forum/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
 
WRInaute passionné
Merci webmasterlamogere,

J'ai donc utilisé ta technique de cette façon:
Code:
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:
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:
/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:
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.
 
WRInaute passionné
Code:
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:
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-
 
WRInaute passionné
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:
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:
 
WRInaute passionné
Re ... Oscour :lol: !

Je suis toujours aussi pommé sur les règles de rewriting ... :x .

Je transmet mes variables de cette façon:
Code:
//Lien censé être rewrité
echo'<a title="'.$titre.'" href="'.$rewriting.'-'.$rewrite_categorie.'-'.$id.'.php">'.$titre.'</a>';
//lien non rewrité
echo'<a title="'.$titre.'" href="page-site.php?rewriting='.$rewriting.'&champ='.$rewrite_categorie.'&id='.$id.'">'.$titre.'</a>';
$rewriting->Contient lettres majuscules/minuscules et tiret (-)
$rewrite_categorie->Contient lettres majuscules/minuscules et tiret (-)
$id->Contient juste un ou des chiffre

Ma règles actuelles:
Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)-(.*)-([0-9]*)\.php$   /page-site.php?rewriting=$1&champ=$2&id=$3 [L]
Sa devrait fonctionner normalement .. non ?
Il existe un lexique simple et détaillé pour les kéké du rewriting ... parce que la .. sa me saoule :evil: !
Merci
 
WRInaute passionné
webmasterlamogere a dit:
tu ne peux pas avoir de - dans rewriting et champ sinon apache ne sait pas ou couper une url-avec-plus-d-un-tiret-01.php

Harggggggggggggggggg ... c'est sérieux ?
Je me suis cassé le c*l à modifier toute mes url qui contenait des tirets bas(_) pour rien :cry: ..je suis dégouté :lol: !

Bon bhin j'ai plus qu'à recommencer mon petit truc sur de nouvelle base.
Merci
 

➡️ 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