Et avec un titre comment faire ??

Discussion dans 'URL Rewriting et .htaccess' créé par JohnAtthane, 19 Novembre 2011.

  1. JohnAtthane
    JohnAtthane Nouveau WRInaute
    Inscrit:
    19 Novembre 2011
    Messages:
    4
    J'aime reçus:
    0
    Bonjour à tous,

    Après qu'Olivier Duffez m'ait répondu en me disant que c'était possible, mais comme en lisant le tuto ici https://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting je n'ai absolument rien compris je viens à vous :)

    J'ai déjà lu pas mal de forums, tuto et je n'arrive pas à trouver une réponse.

    Voici l'url d'une de mes news : http://www.bordeauxpaquebots.com/news.php?id=37 dont le titre est "Point sur les escales 2012"

    Je souhaiterais donc voir dans l'url quelquechose du genre http://www.bordeauxpaquebots.com/37-Point-sur-les-escales-2012

    Enfin le but est qu'il y ait un titre.

    Quelqu'un pourrait il m'expliquer donc comment faire la manipulation ?

    Merci à vous
     
  2. JohnAtthane
    JohnAtthane Nouveau WRInaute
    Inscrit:
    19 Novembre 2011
    Messages:
    4
    J'aime reçus:
    0
    Désolé du double post, mais j'ai trouvé quelquechose qui ne marche qu'à 50%

    J'ai relu tous les commentaires du tutos, et appliqué un: voici mon htaccess

    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^news-(.+)-([0-9]+).html$ /news.php?id=$2 [L]

    Les problèmes sont:

    -Que j'écrive cela http://www.bordeauxpaquebots.com/news-tralalalalala-37.html ou http://www.bordeauxpaquebots.com/news-nimportequoi-37.html , la news s'affiche

    - Sur ma page d'index, si on clique sur le titre de la news, l'url affiché est toujours http://www.bordeauxpaquebots.com/news.php?id=37 et non avec le titre ;(
     
  3. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Salut JohnAtthane,

    L'url rewriting demande un peut plus de manipulations qu'un simple fichier .htaccess à remplir. Je ne suis pas très doué dans le domaine mais je vais quand même tenter de t'orienter.

    Dans un premier temps, il faut transmettre en "GET" les bonnes variables. Pour le moment tu ne transmet que "id" » "news.php?id=37". Il faut transmettre également le titre de la page avec une variable "titre" par exemple » "news.php?id=37&titre=Point sur les escales 2012".

    Ensuite, dans ta page de destination, tu récupères le tout :
    Code:
    $id=$_GET["id"];//correspond à 37
    $titre=$_GET["titre"];// correspond à "Point sur les escales 2012"
    
    On s’oriente maintenant vers le fichier .htaccess :
    Code:
    RewriteEngine on
    RewriteBase /
    
    RewriteRule  ^([0-9]*)-(.*)\.php$  news.php?id=$1&titre=$2 [L]
    
    Cette règle indique qu'il faut ré écrire "news.php?id=37&titre=Point sur les escales 2012" en "37-Point sur les escales 2012.php".

    Comme tu le constates, le titre n'est pas ré écrit correctement, il faut donc ajouter une fonction qui transforme le titre en supprimant les espaces, passer les majuscules en minuscules, etc...

    Dans un fichier "fonctions.php appelé par une "include" ou directement dans le fichier de destination :
    Code:
    function OptimiseUrl($chaine)
    {    
        $chaine=strtolower($chaine);
     
        $accents = Array("/é/", "/è/", "/ê/","/ë/", "/ç/", "/à/", "/â/","/á/","/ä/","/ã/",
    "/å/", "/î/", "/ï/", "/í/", "/ì/", "/ù/", "/ô/", "/ò/", "/ó/", "/ö/");
        $sans = Array("e", "e", "e", "e", "c", "a", "a","a", "a","a", "a", "i", "i", "i", 
    "i", "u", "o", "o", "o", "o");
     
        $chaine = preg_replace($accents, $sans,$chaine);  
        $chaine = preg_replace('#[^A-Za-z0-9]#','-',$chaine);
     
       // Remplace les tirets multiples par un tiret unique
       $chaine = ereg_replace( "\-+", '-', $chaine );
       // Supprime le dernier caractère si c'est un tiret
       $chaine = rtrim( $chaine, '-' );
     
        while (strpos($chaine,'--') !== false) $chaine = str_replace('--','-',$chaine);
     
        return $chaine; 
    }
    
    Actuellement tes liens sont sous la forme :
    Code:
    <a href="http://www.bordeauxpaquebots.com/news.php?id=37">Point sur les escales 2012</a>
    et doivent avoir un code à peut près similaire à :
    Code:
    <a href="http://www.bordeauxpaquebots.com/news.php?id=<?php echo $id;?>"><?php echo $titre;?></a>
    Il faut donc modifier tout tes liens de la façon suivante :
    Code:
    <a href="http://www.bordeauxpaquebots.com/<?php echo $id;?>-<?php echo OptimiseUrl($titre);?>.php"><?php echo $titre;?></a>
    Dans cet exemple, la variable "$titre" associé à la fonction "OptimiseUrl" » "OptimiseUrl($titre)" donne comme résultat » "point-sur-les escales-2012".
    L'action cumulé du fichier .htaccess + fonction OptimiseUrl + modification des liens donne comme résultat une url du type :
    Code:
    http://www.bordeauxpaquebots.com/37-point-sur-les-escales-2012.php
    Dans le même style : Url rewriting du site dynamique
    En espérant t'avoir aidé..
     
  4. JohnAtthane
    JohnAtthane Nouveau WRInaute
    Inscrit:
    19 Novembre 2011
    Messages:
    4
    J'aime reçus:
    0
    Salut,

    Merci de ton aide. J'ai bien compris la fin, mais pas le début. Le
    Code:
    $titre=$_GET["titre"];
    doit se mettre où?

    Sur ma page news.php j'ai cela:

    Code:
    <?php
    	
    	/*
    	Connexion à la BDD
    	*/
    	me identifs
    	
    	/*
    	Affichage d'une news en particulier
    	*/
    	if(isset($_GET['id'])){
    	
    		$id = intval(htmlentities($_GET['id']));
    		/*
    		Si l'id !=0, intval renvoie quelque chose de bon
    		*/
    		if($id != 0){
    			
    			$sql = 'SELECT * FROM news WHERE id='.$id.'';
    			$req = mysql_query($sql) or die(mysql_error());
    			$data = mysql_fetch_assoc($req);
    			
    			echo '<h1 class="news">'.stripslashes($data['titre']).'</h1>';
    			echo '<div class="fond_contenu">';
    			echo '<p class="date"> écrit le : '. date("d/m/Y G:i",strtotime ($data['timestamp'])).'</p>';
    			echo '<p class="fond_contenu">'.(stripslashes($data['contenu'])).'</p>';
    			echo '</div>';
    			
    			
    		}
    		/*
    		id ==0, intval renvoie certainement qqch de faux
    		*/
    		else
    		{
    			echo "Erreur";
    		}
    	
    	}
    	
    		
    	/*
    Listage des 5 dernières news
    	*/
    	else
    	{
    	
    	$sql = 'SELECT * FROM news ORDER BY id DESC LIMIT 0,10';
    	$req = mysql_query($sql) or die(mysql_error());
    	
    	echo '<h1></h1>';
    	
    	while($data = mysql_fetch_assoc($req)){
    				?>
    		<div>
    		<h2 class="news"><a href="news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a><span class="date">écrit le: <?php echo date("d/m/Y G:i", strtotime ($data['timestamp'])); ?></span></h2>
            <div class="fond_contenu"><!--  Cadre News --><p><strong><?php echo stripslashes($data['description']); ?></strong></p></div><!--  Fin Cadre de News -->
            <p>&nbsp;</p>
    	  </div>
    		<?php
    		
    	}
    		
    	}
    	
    	
    	?>

    J'ai bien tenté de le mettre sous
    Code:
    $id = intval(htmlentities($_GET['id']));
    mais le lien reste seulement l'ID. Je pense donc qu eje le met à la mauvaise place
     
  5. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Salut,

    Sur ta page d'accueil, il faut que tu ajoutes dans un premier temps le titre sur tes urls pour que ça donne un truc du style "id-titre.php".
    Code:
    <a href="<?php echo $data['id']; ?>-<?php echo OptimiseUrl($data['titre']);?>.php"><?php echo stripslashes($data['titre']);?></a>
    N'oublie pas la fonction à insérer dans ton fichier...

    Dans ton fichier news.php après
    Code:
    $id = intval(htmlentities($_GET['id']));
    tu ajoutes
    Code:
    $titre = htmlspecialchars($_GET["titre"]);
    Dans le listage des 5 dernières news, tu modifies la ligne
    Code:
    <a href="news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a>
    en
    Code:
    <a href="<?php echo $data['id']; ?>-<?php echo OptimiseUrl($data['titre']);?>.php"><?php echo stripslashes($data['titre']);?></a>
     
  6. JohnAtthane
    JohnAtthane Nouveau WRInaute
    Inscrit:
    19 Novembre 2011
    Messages:
    4
    J'aime reçus:
    0
    Salut,

    Merci beaucoup, là j'ai compris !!
    Je tente se soir en rentrant de la fac et je dirais si ça fonctionne. Mais ça devrait le faire, merci beaucoup !!
     
Chargement...
Similar Threads - titre Forum Date
Titre et Texte uniques d'une collection sur plusieurs pages = duplicate ? Débuter en référencement 27 Avril 2020
Mot-clé visé dans collections + balises titres + H1 = Spam ? Débuter en référencement 21 Février 2020
Meta Titre Longueur ... Débuter en référencement 8 Février 2020
RGPD et conséquences des titres émis à compter de 2020 Droit du web (juridique, fiscalité...) 8 Janvier 2020
Avis sur mon blog et balises de titre H1 Demandes d'avis et de conseils sur vos sites 27 Novembre 2019
WordPress Changement du titre d'une page par Google Demandes d'avis et de conseils sur vos sites 24 Juillet 2019
adresse de site dans le titre du site ? Rédaction web et référencement 18 Juillet 2019
Est-ce bon de mettre un prix dans le titre d'une page d'accueil ? Débuter en référencement 2 Juillet 2019
Problème d'affichage meta titre Débuter en référencement 3 Juin 2019
mon nom de domaine apparait dans le titre de ma page web Débuter en référencement 26 Mai 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice