Règles de réécriture générées à la volée

Page disponible à l'adresse : http://www.tocra.org/articles/Article_Regles-de-reecriture-generees-a-la-volee.html

Apache, Règles de réécriture, Sécurité, Serveur

Publié par Redacteur, le 20 mars 2008.
Règles de réécriture générées à la volée

De façon a être le plus respectueux des notations d'url web, les règles de réécriture sont avant tout un moyen simple d'afficher des urls plus lisible humainement parlant !
J'expose ici une méthode permettant de coder des urls sans avoir besoins de passer de reférence ou d'Id dans l'url ni de date : utiliser simplement le titre d'un article ou d'un commentaire et de traiter tout ça via une simple règle de réécriture et quelques ligne de code serveur (ici PHP).

 

Il est important de pouvoir gérer ses redirections et ses règles de réécriture correctement. De nombreux CMS et autres GED permettent en interne de manipuler les pages sans se préocuper du méchanisme serveur.

Et pourtant, si l'on utilise pas de CMS, il faudra se pencher sur les directives des fichiers de configuration afin de créer ses propres règles.

Pour les dévoloppeurs désireux de gérer correctement leur règles de réécriture, la manipulation de catégories, thématique, articles, commentaires, et les id ou référence est incontournable.

Le but de cet article et de montrer une méthodologie permettant d'exploiter les fichiers de configuration tel que les fichiers .htaccess pour des serveurs de type Apache par exemple et quelques lignes de code en PHP pour le contrôle.

Supposons que nous voulions afficher des articles stokés en base de données. Les articles seront accessibles à partir d'un dossier articles situé la racine du site.
Un fichier se chargera de l'affichage des articles listés et un autre se contentera d'afficher le détail d'un article.
La partie qui nous intéresse est celle qui va afficher le détail de l'article disponible via une url simple telle que :
http://www.domaine.tld/articles/Article_Titre-de-mon-article.html

Nous devons donc mettre en place un règle de réécriture qui redirigera cette url vers le fichier affichant le détail de celui-ci. Notre règle devrait ressembler à ceci :
RewriteRule ^articles/Article_([A-Za-z0-9_-]*).html$ /articles/display-article.php?title=$1 [NC,L]

Afin de disposer d'une url simple sans caratères spéciaux ( uniquement les lettres majuscules, minuscules, les chiffres, l'underscore et le tiret ), nous utiliserons directement le titre de l'article formaté correctement est injecté dans l'url.

Cette petite fonction PHP permet de supprimer tous les caractères inutiles et d'en remplacer certains afin d'obtenir une lecture de l'url sans équivoque.

function getISOCharTranslation($sStr)
{
   $ISOTransChar = array( "'"=>'_', ' "'=>'-', 
   'áàåäâã'=>'a', 'ÁÀÅÄÂÃ'=>'A', 'éèëê'=>'e', 'ÉÈËÊ'=>'E', 
   'íìïî¡'=>'i', 'ÍÌÏÎ'=>'I', 'óòöôõð'=>'o', 'ø'=>'0', 'ÓÒÖÔÕØ'=>'O', 
   'µúùüû'=>'u',  'ÚÙÜÛ'=>'U', 'ýÿ'=>'y', 'ÝŸ'=>'Y', 
   'æ'=>'ae', 'Æ'=>'AE', 'œ'=>'oe', 'Œ'=>'OE', 
   'ß'=>'B', 'ç'=>'c', 'Ç'=>'C', 'Ð'=>'D', 'ñ'=>'n', 'Ñ'=>'N', 
   'Þ'=>'p', 'þ'=>'P', 'š'=>'s', 'Š'=>'S' );

   $tmp = array();
   for($c=0; $c<strlen($sStr); $c++)
   {
      $carac = $sStr{$c};
      foreach($ISOTransChar as $chars => $r)
      {
         if( strpos( $chars, $sStr{$c} )>-1 || strpos( utf8_decode($chars), $sStr{$c} )>-1 )
         { $carac = $r; break; }
      }
      $tmp[] = $carac;
  }

   $newStr = implode("",$tmp);
   $newStr = preg_replace('/--+/', '-', $newStr);
   $newStr = preg_replace('/([^a-z0-9_-])/i', '', $newStr);
   $newStr = preg_replace('/([-])$/', '', $newStr);
   
   return $newStr;
}

0 Commentaire (affiché du plus ancien au plus récent)

    28 05 2012. Il est 03:45:49