je ne comprends pas l'url rewriting

bibiyanki
WRInaute discret
WRInaute discret
 
Messages: 203
Inscription: 4 Jan 2010

je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 9:57

hello:

je suis en train de finir un site associatif et j'arrive à l'étape de la réécriture des urls.

J'ai intégré dans le site un forum qui marche avec l'url rewriting donc j'ai regardé le code htaccess..

le voici
Code: Tout sélectionner
RewriteEngine on
# Lecture d'un sujet
RewriteRule ^post-([0-9]+)-p([0-9]+)(?:-(.*))?\.html$  index.php?page=post&ids=$1&pg=$2 [L]
RewriteRule ^post-([0-9]+)(?:-(.*))?\.html$  index.php?page=post&ids=$1 [L]
RewriteRule ^postsond-([0-9]+)-p([0-9]+)(?:-(.*))?\.html$  index.php?page=post&ids=$1&pg=$2&affsond= [L]
RewriteRule ^postsond-([0-9]+)(?:-(.*))?\.html$  index.php?page=post&ids=$1&affsond= [L]


cela à l'air facile mais ça ne fonctionne absolument pas pour mon script de news...
Le fichier htaccess ainsi que le site sont dans un répertoire /projet/ , mon script de news est dans le répertoire /scientifique/

voici un bout de mon script
Code: Tout sélectionner
<td bgcolor="<?php echo(($i++ % 2 == 0) ? '#ccc' : '#ececef' ); ?>"><h4 align="center"><a href="./scientifique2.php?id=<?php echo $donnees['id']; ?>"><?php echo $donnees['titre'];?></a></h4></td>
           </tr>


donc je dois faire
Code: Tout sélectionner
RewriteRule ^post-([0-9]+)(?:-(.*))?\.html$  scientifique2.php?id=$1 [L]


mais cela ne fonctionne pas, pouvez vous m'aider ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 10:00

bibiyanki a écrit:mais cela ne fonctionne pas, pouvez vous m'aider ?


C'est à dire ? Il faut aussi que tu modifies ton code HTML, hein...

bibiyanki
WRInaute discret
WRInaute discret
 
Messages: 203
Inscription: 4 Jan 2010

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 10:16

c'est à dire ? car j'ai trouvé que des tutoriels pour htaccess mais pas pour mon html!


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 10:21



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

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 10:59

Salut,
Pour "dégrossir" un peut la chose :
Code: Tout sélectionner
<a href="./scientifique2.php?id=<?php echo $donnees['id']; ?>"><?php echo $donnees['titre'];?></a>

donne un lien du style :
Code: Tout sélectionner
<a href="./scientifique2.php?id=1">Titre de mon poste</a>

Pour obtenir une url du genre :
Code: Tout sélectionner
<a href="./titre-de-mon-poste-1.php">Titre de mon poste</a>

Il faut transformer l'url en :
Code: Tout sélectionner
<a href="./<?php echo mafonction($donnees['titre']);?>-<?php echo $donnees['id'];?>.php">Titre de mon poste</a>

ou mafonction() est une fonction permettant de ré écrire correctement le titre inclue dans l'url.
Code: Tout sélectionner
function mafonction($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;
}


A cela s'ajoute la ligne de rewrite dans le fichier .htaccess qui pourait être :
Code: Tout sélectionner
RewriteRule  ^(.*)-([0-9]*)\.php$  page.php?titre=$1&id=$2 [L]


Note: dans ce cas précis la page affichant les données se nomme "page.php" et reçoit comme variable "titre" et "id".

En résumé :
1)Utiliser le fichier .htaccess pour le rewriting.
2) Modifier la forme des liens en fonction du rewriting utilisé.
3) Inclure une fonction pour la ré écriture.

bibiyanki
WRInaute discret
WRInaute discret
 
Messages: 203
Inscription: 4 Jan 2010

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 11:17

merci de ta réponse

j'ai réussi à avoir un résultat mais ce n'est pas le bon LOL


au lieu d'écrire le titre de ma news, il écrit simplement scientifique.php

j'ai fait ça
dans mon fichier /scientifique/index.php (qui contient le code php de ma liste de news) et la page sur laquel est appelé mon script s'appelle scientifique.php

Code: Tout sélectionner
<code>function mafonction($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;
}


      ?>


     
          <table style="width:100%;">
<tr>
            <td bgcolor="<?php echo(($i++ % 2 == 0) ? '#ccc' : '#ececef' ); ?>"><h4 align="center"><a href="".//scientifique2.php?id=<?php echo mafonction($donnees['titre']);?>-<?php echo $donnees['id'];?>.php"><?php echo $donnees['titre'];?></a></h4></td>
           </tr>
<tr>
<td><?php echo substr($donnees['contenu'], 0, 600);?>...</td>
           </tr>
          </table></code>

bibiyanki
WRInaute discret
WRInaute discret
 
Messages: 203
Inscription: 4 Jan 2010

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 11:35

excuse cela marche j'avais oublié

<a href="" ">

trop de "

mais il me redirectionne vers ma page d'erreur, je pense mettre tromper dans mon fichier htaccess

Code: Tout sélectionner
RewriteEngine on
RewriteRule  ^(.*)-([0-9]*)\.php$  scientifique.php/titre=$1&id=$2 [L]


sachant que ma page qui liste mes news s'appelle scientifique.php et que la page ou est appelé une news s'appelle scientifique2.php

merci de vos aides


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

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 13:13

Ton code ci-dessous est faux :
Code: Tout sélectionner
<a href="".//scientifique2.php?id=<?php echo mafonction($donnees['titre']);?>-<?php echo $donnees['id'];?>.php"><?php echo $donnees['titre'];?></a>

ça serait plutôt :
Code: Tout sélectionner
<a href="./<?php echo mafonction($donnees['titre']);?>-<?php echo $donnees['id'];?>.php"><?php echo $donnees['titre'];?></a>

Il est inutile d'utiliser le nom de la page "scientifique2.php" dans ton lien tout comme "?id=".

Image
Src : http://creer-un-site.fr/directive-du-fichier-htaccess-178.php
et pour le htaccess :
Code: Tout sélectionner
RewriteRule  ^(.*)-([0-9]*)\.php$  scientifique2.php?titre=$1&id=$2 [L]


C'est dans la page "scientifique.php" qu'il faut ré écrire les lien et insérer la fonction
Code: Tout sélectionner
<?php
function mafonction($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;
}
?>
<table style="width:100%;">
<tr>
  <td bgcolor="<?php echo(($i++ % 2 == 0) ? '#ccc' : '#ececef' ); ?>">
   <h4 align="center"><a href="./<?php echo mafonction($donnees['titre']);?>-<?php echo $donnees['id'];?>.php"><?php echo $donnees['titre'];?></a></h4>
  </td>
</tr>
<tr>
  <td>
   <?php echo substr($donnees['contenu'], 0, 600);?>...
  </td>
</tr>
</table>

ps : tu devrais remplacer ton tableau par des div +css !

bibiyanki
WRInaute discret
WRInaute discret
 
Messages: 203
Inscription: 4 Jan 2010

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 19:38

alors merci beaucoup cela marche super bien et rapidement!

par contre je ne peux pas redéclarer la fonction car j'ai des news scientifique,actualité, presse

il faut peut être juste que je change le nom "mafonction" ? je test :)

bibiyanki
WRInaute discret
WRInaute discret
 
Messages: 203
Inscription: 4 Jan 2010

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 19:47

apparemment cela ne marche pas quand on a plusieurs scripts news.

j'ai fait la même chose pour ma page news.php sauf que j'ai renommé la fonction "pomme" et j'ai changé dans le htaccess scientifique2.php par news.php

cela marche pour scientifique2.php

mais pour news.php cela ne m'affiche pas la news mais bien la page...

en faite je crois que c'est parce que ma fonction donnees s'appelle pareil pour le titre mais c'est quand même pas la même page!!

bibiyanki
WRInaute discret
WRInaute discret
 
Messages: 203
Inscription: 4 Jan 2010

Re: je ne comprends pas l'url rewriting

Message le Dim Mai 01, 2011 20:09

je rectifie tout marche, c'est juste une erreur humaine (comme d'habitude) dans le htaccess

merci encore, je mets résolu


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

Re: je ne comprends pas l'url rewriting

Message le Lun Mai 02, 2011 10:54

Et bien tant mieux si ça fonctionne ;). Pour la fonction, tu devrais la mettre dans un fichier à part genre "fonctions.php" et tu fais une simple "include"; comme ça tu peux utiliser la même fonction pour tout tes fichiers.


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