Règles de réécriture générées à la volée
Apache, Règles de réécriture, Sécurité, Serveur
Règles de réécriture générées à la volée
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 devra ressebler 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 chifres, 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;
}
L...
2 Commentaires
Test
Voici un autre commentaire dont le titre est identique à un commentaire existant pour ce même article...
Il est a noter que cela devrait poser problème lors de l'affichage du détail de ce commentaire (ici vide pour des raisons techniques).
Dans la logique du dépôts de commentaire, nous ne devrions pas avoir de commentaire dont le titre est identique. A vrai dire, pourquoi pas ?
L'idée d'un commentaire n'est-elle pas résumé dans son titre ! Alors pourquoi déposer un commentaire dont l'idée serait la même, ou pls exactement identique ...
Il devrait quand même être possible de déposer un commentaire avec un titre existant dans le système, de plus pour un article ...
Bref comment se passe ce test ?



