URL_Rewriting avec MySQL

Nouveau WRInaute
Bonjour à tous,

Je vous explique mon problème:

J'ai actuellement un site avec des articles présentés comme ceci: http://monsite.com/article.php?sid=206 .

Ainsi, je souhaiterai passer par ma base de donner pour récupérer le titre de mon article pour obtenir un lien comme ceci:
http://monsite.com/nom_de_article_recuperer_sur_mysql_grace_a_id.html

Seul problème, un .htaccess ne peut pas récupérer des informations dans une BDD... donc comment faire ?

Merci d'avance de me mettre sur la piste ! :roll:
 
WRInaute discret
Normalement lorsque tu génères tes liens, en plus de prendre l'id de l'article à afficher, tu mets dans ta requête la demande du titre en même temps :)

Exemple :
Code:
$sql  = "SELECT id,titre FROM articles ORDER BY id DEC limit 5";
$req = mysql_query($sql);
while(list($id,$titre) = mysql_fetch_array($req)){
echo '<a href="'.filtre($titre).'-'.$id.'.html">'.$titre.'</a>';
}

Après, bien sur il faut que tu ais une fonction qui te permette de filtrer les titres, afin de supprimer les caractères interdit :)
 
Nouveau WRInaute
Oui, tout ça c'est bien fait. :D

Mais le soucis est que je ne vois pas comment le .htaccess peut aller chercher ce code... car je n'indique pas le titre dans ma requête en fait, mais juste l'id.

Regardes: http://www.pc-soluces.com/article.php?sid=200

Et dans ce cas, comment puis-je faire? y a - t il une solution ? :roll:

(Je pensai à passer par php pour récupérer le titre, code que j'ai réalisé et qui fonctionne, mais comment l'envoyer au .htaccess?)

Merci d'avance de ton aide.
 
Nouveau WRInaute
Bon, en cherchant un peu voilà ce que j'ai fais... :

.htaccess:
Code:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([0-9]+)-([a-z0-9_-]+)*\.html$ /article.php?id=($1)[L]

article.php:
Code:
$reponse = mysql_query("SELECT title FROM stories WHERE sid='$sid'");

while ($donnees = mysql_fetch_array($reponse) )
{
	$url_rewriting = $donnees['title'];
	
	//Passage de $url_rewriting (le titre) dans la moulinette
	$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ!?<>~#'|/@=";
	$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn           ";

	$url_rewriting = strtr($url_rewriting,$tofind,$replac);
	$url_rewriting = strtolower($url_rewriting);
	$url_rewriting = ereg_replace("[^a-zA-Z0-9]", "_", $url_rewriting);
	
	while (strstr($url_rewriting, '__')){
		$url_rewriting = str_replace('__', '_', $url_rewriting);
	}
}
echo "<a href=".$sid."-".$url_rewriting.".html>".$sid."-".$url_rewriting.".html</a>";


Lorsque j'apelle http://monsite.com/article.php?sid=1 :
Code:
http://monsite.com/1-comment_modifier_et_ou_supprimer_edito.html

Lorsque j'apelle http://monsite.com/1-comment_modifier_et_ou_supprimer_edito.html :
Code:
-.html
Warning: Cannot modify header information - headers already sent by (output started at W:\var\www\article.php:36) in W:\var\www\article.php on line 49
 
WRInaute accro
A un moment ou un autre tu utilises la fonction php header, non ? Car ce genre d'erreur survient souvent avec cette fonction quand tu as des données affichée dans la page avant l'appel de header (voire des espaces ou autre saut de ligne).
 
Nouveau WRInaute
Effectivement j'avais les 2 problèmes... (Le BOM UTF-8 et avant le Header).

J'ai donc mis avant le footer...

Cette fois-ci le lien qu'il m'affiche est correct quand je rentre
Code:
http://monsite.com/article.php?sid=1 (affiche une lien http://monsite.com/1-comment_modifier_et_ou_supprimer_edito.html )

Cependant, il retourne sur la page d'accueil lorsque je tape:
Code:
http://monsite.com/1-comment_modifier_et_ou_supprimer_edito.html

PS: Je n'ai mis que ce que j'ai indiqué plus haut dans mon .htaccess...
 
WRInaute accro
As tu fais une fonction qui va chercher dans ta base de donnée le lien entre l'ID et l'url, et qui renvoie l'ID pour une url donnée ?
 
Nouveau WRInaute
Ce n'est pas vraiment une fonction mais un morceau de code que j'ai fabriqué qui me renvoie le lien que je voudrai avoir.

Ce code va, en fonction de l'ID, chercher dans la BDD le titre et me retourne le lien qui aura été passés dans une moulinette (pour les "_" au lieu des espaces ou autres caractères spécifiques...)
Code:
$reponse = mysql_query("SELECT title FROM stories WHERE sid='$sid'");

while ($donnees = mysql_fetch_array($reponse) )
{
   $url_rewriting = $donnees['title'];
   
   //Passage de $url_rewriting (le titre) dans la moulinette
   $tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ!?<>~#'|/@=";
   $replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn           ";

   $url_rewriting = strtr($url_rewriting,$tofind,$replac);
   $url_rewriting = strtolower($url_rewriting);
   $url_rewriting = ereg_replace("[^a-zA-Z0-9]", "_", $url_rewriting);
   
   while (strstr($url_rewriting, '__')){
      $url_rewriting = str_replace('__', '_', $url_rewriting);
   }
}
echo "<a href=".$sid."-".$url_rewriting.".html>".$sid."-".$url_rewriting.".html</a>";

Du coup, j'ai bien un lien sur ma page avec http://monsite.com/ID-titre_de_mon_article.html , mais ça ne marche pas car quand je clic dessus je suis redirigé vers la page d'accueil... (Je le répète, je n'ai fais aucune redirection vers la page d'accueil en cas d'erreur 404 dans mon .htaccess...)

Peux-tu me dire quoi faire stp ?
 
WRInaute discret
perso l'url rewriting j'ai tout fait en php
au moment d'ajouter un article je stocke dans la bdd une joli url lui correspondant , j'ai plus qu'a faire une requête pour retrouver l'article correspondant

Code:
$request_uri=$_SERVER['REQUEST_URI'];

$query="SELECT * FROM tb_annonces WHERE url_annonces='$request_uri'";
$resultat = mysql_query($query);


	  if(mysql_num_rows($resultat)>0){ .......
 
Nouveau WRInaute
Pour ma part, je ne peux pas créer cette table dans ma BDD...

J'ai crée ceci dans article.php:
Code:
   	$url_page_entre = $_SERVER["PHP_SELF"];
	$url_page_sortie = substr($url_page_entre, 1);
	
	$url_final=explode("-", $url_page_sortie, 2);
	($url_final[0]);
	
       //Affichage sous la forme http://monsite.com/article.php?sid=ID
	echo "<br/><a href=article.php?sid=".$url_final[0].">lien</a>";

        //On initialise la variable $sid (numéro ID) par $url_final[0] (retrouvé dans l'url .html)
	$sid = $url_final;

Ceci dans le .htaccess:
Code:
Options +FollowSymlinks
RewriteEngine On

RewriteRule ^index\.html$ /index.php
RewriteRule ^([0-9]+)-([a-z0-9_-]+)*\.html$ /article.php?sid=($1)[L]

Lorsque je tape http://monsite.com/1-comment_modifier_et_ou_supprimer_edito.html , je retombe quand même sur la page d'accueil, donc l'url_rewriting ne fonctionne pas...

Merci de votre aide par avance.
 
WRInaute accro
Bien sûr puisque tu fais ton script en fonction de l'ID alors que tu n'as pas l'ID

Tu as l'url (que tu appelles l'ID) dans le htaccess mais à aucun moment tu ne vas cherche l'ID
 

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