Consulter un tutoriel

Créer une gestion des URLs

2020-03-25 21:56:10 par François Parisien

Contexte

Avec le contenu dynamique des sites web, il peut être intéressant de pouvoir attribuer une URL plus sexy à chacun de ces contenu. Si on utilise un CMS existant, la gestion des URLs est prise en charge. Mais s'il s'agit d'un code personnel, alors il faudra penser à ce système.

On verra ici comment créer une gestion dynamique des URLs. C'est-à-dire qu'on va bâtir un outil qui va permettre de pouvoir créer une nouvelle URL sans devoir modifier un fichier physique (par exemple un .htaccess). Tout devra se faire de façon dynamique.

Tout au long de ce tutoriel, nous allons prendre pour acquis que vous avez des sections dynamiques (comme des news, des articles, etc.), mais que vous avez aussi des sections statiques (donc des fichiers physique avec du texte en dur).

Description du besoin

Nous voulons avoir des URLs propres pour l'ensemble du site. Donc, ne plus avoir d'URL du genre « articles.php?id=1 », mais bien des URLs qui ressembleraient à « mon-super-article.html ».

Requis techniques

  • URL Rewrite d'Apache (ou l'équivalent en Nginx);
  • PHP >= 7;
  • MySQL >= 5.6

Connaissances requises

  • Capable de faire des règles de réécriture des URLs;
  • Manipuler une base de données MySQL;
  • Connaître le principe de fonctionnement d'un « front controller »

Description du fonctionnement

Il y a plusieurs façon d'aborder cette gestion d'URL. La façon la plus simple sera de créer une nouvelle section de gestion d'URL.

Cette section aura un formulaire qui permettra d'entrer l'URL voulu et l'URL réelle. Par exemple, une URL souhaitée serait « mon-super-article.html » et l'URL réelle serait « article.php?id=1 ».

Ensuite, il faudra créer une règle à l'intérieur des configurations Apache (.htaccess) ou Nginx afin d'intercepter toutes les requêtes et les rediriger sur le fichier index.php de votre site. à moins que la requête demandée pointe sur un fichier qui existe physiquement sur le serveur. à ce moment-là, il ne faut pas rediriger la requête vers index.php, mais la laisser appeler le fichier demandé. Attention, il faudra créer un paramètre à intégrer afin de passer la requête du visiteur à notre fichier index.php.

Le fichier index.php sera, ce que l'on appelle, un « front controller ». C'est-à-dire qu'il va dorénavant analyser l'information qu'il recevra et appellera la bonne page.

Le flow sera donc celui-là :

  1. L'utilisateur appelle « mon-super-article.html »
  2. En arrière, Apache (ou Nginx) redirige la requête vers index.php avec, comme argument « mon-super-article.html »
  3. Index.php va analyser le paramètre et appellera les bons fichiers pour afficher la bonne page

Les étapes à réaliser

  • Créer une nouvelle table qui s'appellera « url_rewrite ». Cette table aura les champs suivant :
    • ID : Identifiant numérique unique;
    • requested_url : La nouvelle URL désirée;
    • reel_path : L'URL réelle
  • Créer une section qui permettra de remplir cette table. Un simple formulaire fera l'affaire;
  • écrire une règle dans Apache (.htaccess) ou Nginx qui redirigera toutes les requêtes vers le fichier index.php, excepté les requêtes vers des fichiers physiques existants;
  • Le fichier index.php devra faire ces vérifications :
    • Récupérer l'URL demandé par le visiteur
    • L'URL existe-t-elle dans la table « url_rewrite » ? Si elle n'existe pas, il faudra afficher une page d'erreur 404;
    • Si elle existe, on devra obtenir l'URL réelle et bâtir les paramètres. Par exemple, dans le cas d'une URL réelle comme ceci : article.php?id=1, il faudra créer la variable $_GET[‘id'] et lui attribuer la valeur « 1 »
    • Une fois ceci fait, on va appeler le fichier de l'URL réelle via une require()

Aller plus loin

Afin d'optimiser le fonctionnement général de ce système, il est possible d'y apporter quelques modifications :

  • Mettre la liste des URLs en cache. Au lieu d'appeler la table SQL à chaque chargement de page, on pourrait prendre la liste des URLs, la mettre dans un fichier et appeler ce fichier-là à la place;
  • Établir un type de rewrite. Si vous faites une faute dans l'URL, mais que Google l'a déjà référencé, il serait mauvais de la changer dans votre système. Google aura donc une page qui retournera une erreur 404 et c'est mauvais pour votre positionnement. Vous pouvez donc penser à créer un système qui redirigera les URLs vers d'autres. Par exemple « mon-super-article.html » pourrait rediriger vers « mon-super-nouvel-article.html ». Pour y arriver, on peut ajouter une nouvelle colonne dans la table qui permettra de savoir si l'URL est une redirection ou pas. Ensuite, index.php pourra se charger de rediriger la requête vers l'URL souhaitée;
  • Pourquoi ne pas mettre en place des statistiques ? Par exemple, combien de fois une URL a été appelé. Très utile dans le cas d'une redirection ou d'un erreur 404

À propos de l'auteur

François Parisien

Développeur PHP de métier, mais développeur PHP surtout par passion. Au début de mon adolescence, je découvre ce langage alors que j'avais soif de faire mon propre site web. C'était au tournant des années 2000. Depuis, je n'ai cessé d'apprendre. Avec le temps, j'ai touché à plusieurs outils : Wordpress, Drupal, Joomla, Symfony, Magento 1 et Magento 2. Cela m'a apporté une plus large connaissance encore. Connaissance que je vais tenter de transmettre ici.


Scroll to Top