Du rewriting réalisé avec du PHP Par Jérémy_B www.openclassrooms.com Sommaire 2
Du rewriting réalisé avec du PHP Par Jérémy_B www.openclassrooms.com Sommaire 2 Sommaire ........................................................................................................................................... 3 Du rewriting réalisé avec du PHP ...................................................................................................... 3 Utilisation pour une news .................................................................................................................................................. 3 Code pour la news ...................................................................................................................................................................................................... 5 Code pour l'URL Rewriting .......................................................................................................................................................................................... 6 Déroulement des évènements .................................................................................................................................................................................... 6 Améliorations et astuces ................................................................................................................................................... 10 Partager ..................................................................................................................................................................................................................... 2/11 www.openclassrooms.com Du rewriting réalisé avec du PHP Par Jérémy_B Mise à jour : 01/01/1970 Difficulté : Intermédiaire L'URL Rewriting est souvent nécessaire pour les sites de grande envergure, tout simplement pour masquer le nom des paramètres envoyés dans les URL, pour rendre les adresses plus séduisantes, mais aussi pour accroître le référencement (mais pas dans tous les cas). V ous aurez sans doute remarqué que les hébergeurs ne proposent pas tous l'URL Rewriting, c'est le cas de Free. Les choses sont révolues maintenant, nous pouvons aussi, à présent, créer de l'URL Rewriting avec un peu de tricherie, mais intelligemment. V ous avez toujours rêvé d'avoir de beaux liens comme celui-ci : http://monsite.fr/page-1.html, ou encore http://monsite.fr/forum-1- maphraseavec-des-tirets.html ? V ous en avez marre d'avoir ce type de lien : http://monsite.fr/page.php?id=1 ? Ou encore ceci : http://monsite.fr/?/page-1.html ? Alors suivez le guide ! Liens utiles : le cours de php de M@teo21, mais plus particulièrement les expressions régulières explication de l'URL Rewriting sur Webrankinfo.com explication de l'URL Rewriting sur Urlrewriting.fr comment définir correctement des URL (à partir de la section : définir les schémas d'URL) du Rewriting sans le moteur rewrite Dans ce tutoriel, je ne vous apprends pas l'astuce qui permet de créer ce type d'URL, car tout est indiqué dans le dernier lien utile, mais plutôt comment s'en servir de façon plus rigoureuse avec des exemples et des astuces. Sommaire du tutoriel : Utilisation pour une news Améliorations et astuces Utilisation pour une news Pour comprendre son utilisation, rien de mieux que de l'expliquer en donnant un exemple concret. Pour cela, nous allons nous intéresser au système de news. J'ai choisi cet exemple, tout simplement parce que je suis sûr que vous aurez déjà vu comment cela fonctionne, si vous avez lu le tutoriel de M@teo21. Pour éviter de trop se prendre la tête avec les URL, les includes, etc., nous commencerons par mettre nos fichiers à la racine du FTP. Code pour la news Code : SQL - La base de données Sommaire 3/11 www.openclassrooms.com CREATE TABLE IF NOT EXISTS `news` ( `id` mediumint(9) NOT NULL auto_increment, `auteur` varchar(50) NOT NULL, `titre` varchar(200) NOT NULL, `message` text NOT NULL, `temps` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; INSERT INTO `news` (`id`, `auteur`, `titre`, `message`, `temps`) VALUES (1, 'Jérémy_B', 'L''URL rewriting', 'C''était pas si dur que ça !', '2008-12-31 01:36:14'), (2, 'Jean', 'Re !', 'C''est vrai que c''est tout simple.', '2009-01- 10 12:46:24'), (3, 'Paul', 'Re re !', 'Merci Jérémy_B. :)', '2009-01-10 13:39:13'); Code : PHP - Le fichier news.php <?php mysql_connect('localhost', 'root', ''); mysql_select_db('urlrewriting'); // Mettez ici le nom de votre base de données. ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Page de news avec URL Rewriting !</title> <meta http-equiv="Content-Type" content="text/html; charset=iso- 8859-1" /> </head> <body> <?php $requete = "SELECT id, auteur, titre, message, DATE_FORMAT(temps, '%d/%m/%Y') AS temps_formate FROM news"; if (!empty($match)) { $requete .= " WHERE id = ".$match[1]; } $resultat = mysql_query($requete); while ($donnees = mysql_fetch_assoc($resultat)) { echo "Id : ".$donnees['id']."<br />"; echo "Auteur : ".stripslashes($donnees['auteur'])."<br />"; echo "Titre : ".stripslashes($donnees['titre'])."<br />"; echo "Message : ".stripslashes($donnees['message'])."<br />"; echo "Temps : ".$donnees['temps_formate']."<br />"; } ?> </body> </html> V oilà, jusque-là, rien de compliqué. Si vous avez été attentifs, vous aurez vu une petite condition vérifiant si la variable $match existe, et si elle n'est pas nulle. Elle nous sera utile lorsqu'on aura mis en place les codes pour l'URL Rewriting. D'ailleurs, il est Du rewriting réalisé avec du PHP 4/11 www.openclassrooms.com temps de passer aux pages qui nous intéressent le plus. Code pour l'URL Rewriting Code : Autre - Le fichier .htaccess php 1 ErrorDocument 404 /rewriting.php Explication php 1 : ça n'a aucun rapport avec l'URL Rewriting, à part activer PHP 5 chez Free. Donc, si vous n'êtes pas chez cet hébergeur, ne mettez pas cette ligne dans votre ".htaccess". ErrorDocument 404 / rewriting.php : cette ligne permet de créer une petite personnalisation lorsque vous avez une erreur 404. En gros, au lieu de voir la page d'erreur générée par PHP, on verra votre page rewriting.php. Les plus malins d'entre vous auront compris que c'est avec cette page qu'on va un peu tricher. Note : vous n'êtes pas obligés d'appeler votre page rewriting.php, vous pouvez l'appeler, par exemple, urlrewriting.php ou autre. Code : PHP - Le fichier rewriting.php <?php if (preg_match('#news-([0-9-]+)\.html#isU', $_SERVER['REDIRECT_URL'], $match)) { // Modification du code retour, pour que les moteurs de recherche indexent nos pages ! header("Status: 200 OK", false, 200); require 'news.php'; } else { require 'erreur404.php'; } Explication $_SERVER['REDIRECT_URL'] : c'est une variable prédéfinie créée par PHP, qui nous permet d'obtenir l'URL de la page souhaitée. Note : il se peut que votre hébergeur n'ait pas activé toutes les variables $_SERVER dont celle-ci. Vérifiez, ainsi, dans le PHP Info > PHP V ariables, qu'elle est bien activée. preg_match('#news-([0-9-]+)\.html#isU', $_SERVER['REDIRECT_URL'], $match) : un exemple pour comprendre ce code. Soit http://monsite.fr/news-1.html, la page qu'on souhaite afficher (donc, $_SERVER['REDIRECT_URL'] = /news- 1.html). Avec cette fonction, on peut récupérer le chiffre 1, grâce à l'expression régulière ([0-9]+) (ou appeler plutôt class), qui sera stocké dans la variable $match. $match n'est pas qu'une simple variable, mais un tableau (à noter que $match[0] vaut : /news-1.html). Par exemple, si vous voulez transférer deux paramètres dans l'URL, votre expression régulière devrait être : "^/news-([0-9]+)-([0- 9]+)\.html$", vous pourrez les récupérer avec $match[1] et $match[2]. V ous pouvez aussi récupérer autre chose que des chiffres, comme du texte. Par exemple, avec http://monsite.php/news-maphraseavec-des-tirets.html, votre REGEX sera : "^/news-([a-zA-Z_-]+)\.html$" et $match[1] vaudra : maphraseavec-des-tirets. Il faut absolument que le paramètre contenant du texte dans l'URL soit accroché par quelque chose (lettre collée, tiret, etc.), mais surtout pas d'espace ! Du rewriting réalisé avec du PHP 5/11 www.openclassrooms.com Déroulement des évènements On va donc faire appel à la page de news, pour afficher la toute première actualité. Ainsi, rentrons dans la barre d'adresse de notre navigateur, l'adresse suivante : http://monsite.fr/news-1.html. Mais cette page n'existe pas sur notre FTP... ça va me retourner une erreur, non ? Exact, et pas n'importe quelle erreur, la 404. C'est là que notre tricherie va opérer ! Je vous ai dit qu'avec le fichier .htaccess, on allait rediriger l'erreur sur la page rewriting.php. Avec notre page de code, on fait une condition sur l'URL qu'on nous a envoyée, on récupère le chiffre 1, nous permettant, en réalité, de prendre l'id de la news, on renvoie un header pour dire que ce n'était pas une erreur, puis on inclut la page news.php, qui elle, existe réellement. Je vous rappelle qu'on a récupéré l'id dans la variable $match[1]. Je vous rappelle aussi qu'une variable peut être transmise dans une autre page qu'on inclut juste après sa déclaration, à condition que dans la deuxième page, la variable ait le même nom. Pour en revenir au déroulement des opérations, on vient donc d'inclure la page news.php. Sur cette page, notre requête peut avoir deux cas de figure : soit il y a un paramètre, l'id de la news, qui vaudra 1 pour nous. La condition sera donc validée et nous concaténerons la variable $requete grâce au ".=", afin d'ajouter un critère de sélection à notre requête ; soit notre URL n'avait pas de paramètre, on ignore alors la condition, car $match sera vide et n'existera tout simplement pas. Pas la peine de protéger notre variable $match[1] dans la requête avec la fonction intval() ou autre de PHP, puisqu'elle a déjà eu le droit à un petit test avec la REGEX (([0-9]+), vous vous en souvenez ?). Nous sommes sûrs d'avoir affaire à un chiffre, donc pas d'inquiétude, nous n'aurons pas d'injection SQL ici. Et voilà, miracle, ça marche ! Qu'on appelle notre page avec l'adresse http://monsite.fr/news-1.html ou avec http://monsite.fr/news.html, on visualise bien notre news. Améliorations et astuces Pour que notre script soit le plus intéressant possible, il faudrait qu'on puisse avoir plusieurs possibilités dans nos URL. Mais notre script a ses limites, on ne peut pas tout faire. Nous devrons donc mettre en place une cohérence dans nos liens, sinon, on ne s'en sortira jamais. Ainsi, dans les paramètres de l'URL, nous mettrons, dans un premier temps, les chiffres (id de la news, du membre, du commentaire, du topic, etc.), puis, dans un second temps, les chaînes de caractères. Nous pourrons donc arriver à ce type de lien : http://monsite.fr/page.html http://monsite.fr/page-1.html http://monsite.fr/page-1-2.html http://monsite.fr/page-1-le-super-titre.html http://monsite.fr/page-1-2-le-2-em-super-titre.html (la chaîne de caractères peut contenir des chiffres) etc. Code : PHP - Le fichier rewriting.php <?php $page_du_site = array("/news"); // Super important les / devant le nom du fichier ! $url_sans_parametre = str_replace('.html', '', $_SERVER['REDIRECT_URL']); $url_avec_parametre = substr($_SERVER['REDIRECT_URL'], 0, Du rewriting réalisé avec du PHP 6/11 www.openclassrooms.com strpos($_SERVER['REDIRECT_URL'], "-")); if (in_array($url_sans_parametre, $page_du_site)) { uploads/S4/ du-rewriting-realise-avec-du-php.pdf
Documents similaires
-
17
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 22, 2022
- Catégorie Law / Droit
- Langue French
- Taille du fichier 0.2826MB