Steve TENZA
Intervient pour votre site internet
Facebook Me contacter Cookie
Télécharger
Noter:
5/5 (4)
Ajouté/Modifié le 2024-11-09
Visionné 12673 fois

Tutoriel sur la Réécriture d'URL en PHP

Description

Ce tutoriel porte sur la réécriture d'URL en PHP, une technique essentielle pour créer des URL conviviales pour les visiteurs. L'objectif est de rendre les adresses URL plus lisibles, compréhensibles et adaptées aux besoins des utilisateurs.

Une partie importante de ce tutoriel concerne une fonction qui permet de convertir n'importe quelle chaîne de caractères en une version sans accents et sans caractères autres que des chiffres, des lettres et des tirets. Cette conversion est essentielle pour créer des chaînes compatibles avec l'URL rewriting. Elle est particulièrement utile pour les sites web, les blogs et les forums, où des titres de sujets doivent être transformés en chaînes adaptées à l'URL rewriting.

L'utilisation de ce service est simple et offre une confiance aux utilisateurs sur les moteurs de recherche en voyant un lien propose débarrassé de toutes variables GET.

$MaChaine = "À bientôt!";
$MaChaine = titre_url_rewrite($MaChaine);
echo $MaChaine; // a-bientot
//Est prévue pour un encodage en UTF-8, si vous utilisez ISO il vous faudra passer chaque caractère avec utf8_encode() si ça fait des caractères bizarres de type '?' ou un caractère losange
function remplacerAccent($chaine){
$a = ['à','á','â','ã','ä','å', 'æ','Ā','ā','Ă','ă','Ą','ą','À','Á','Â','Ã','Ä','Å', 'Æ','ç','Ç','Ð','Ć','ć','Ĉ','ĉ','Ċ','ċ','Č','č','Ď','ď','Đ','đ','È','É','Ê','Ë','è','é','ê','ë','Ē','ē','Ė','ė','Ę','ę','Ě','ě','ƒ', 'fi', 'fl','Ĝ','ĝ','Ğ','ğ','Ġ','ġ','Ģ','ǵ','Ĥ','ĥ','Ħ','ħ','Ì','Í','Î','Ï','ì','í','î','ï','Ĩ','ĩ','Ī','ī','Į','į','İ','ı', 'IJ', 'ij','Ĵ','ĵ','Ķ','ķ','ĸ','Ĺ','ĺ','Ļ','ļ','Ľ','ľ','Ŀ','ŀ','Ł','ł','ñ','Ñ','Ń','ń','Ņ','ņ','Ň','ň','ʼn','Ŋ','ŋ','Ò','Ó','Ô','Õ','Ö','ð','ò','ó','ô','õ','ö','ø','Ø','Ō','ō','Ő','ő', 'Œ', 'œ','Ŕ','ŕ','Ŗ','ŗ','Ř','ř','ß','ẞ','Ś','ś','Ŝ','ŝ','Ş','ş','Š','š','Ţ','ţ','Ť','ť','Ŧ','ŧ','Ù','Ú','Û','Ü','Ũ','ũ','Ū','ū','Ŭ','ŭ','Ů','ů','Ű','ű','Ų','ų','ù','ú','û','ü','Ŵ','ŵ','×','Ý','Ŷ','ŷ','Ÿ','ý','ÿ','Ź','ź','Ż','ż','Ž','ž','Ƶ'];
$b = ['a','a','a','a','a','a','ae','A','a','A','a','A','a','A','A','A','A','A','A','AE','c','C','D','C','c','C','c','C','c','C','c','D','d','D','d','E','E','E','E','e','e','e','e','E','e','E','e','E','e','E','e','f','fi','fl','G','g','G','g','G','g','G','g','H','h','H','h','I','I','I','I','i','i','i','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','k','L','l','L','l','L','l','L','l','L','l','n','N','N','n','N','n','N','n','n','N','n','O','O','O','O','O','o','o','o','o','o','o','o','O','O','o','O','o','OE','oe','R','r','R','r','R','R','s','S','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','U','U','U','U','u','U','u','U','u','U','u','U','u','U','u','u','u','u','u','W','w','x','Y','Y','y','Y','y','y','Z','z','Z','z','Z','z','Z'];
return str_replace($a, $b, $chaine);
}

function titre_url_rewrite($titre){

//on commence par enlever les accents
$c = remplacerAccents($titre);

//notre retour est pour le moment vide car on va vérifier tous les caractères un par un et les ajouter au fur et à mesure
$retour = '';

//on vérifie les caractères de la chaine
for($i=0;$i<=strlen($c)-1;$i++){

//on met le caractère en minuscule
$caractere = strtolower(substr($c, $i, 1));

//si c'est un chiffre ou une lettre, on ajoute le caractère au retour, sinon on le converti en -
$retour .= preg_match("#^[a-z0-9]+$#",$caractere) ? $caractere : '-';

}

//on enlève les tiret successifs, comme -----
//on les remplace par un seul tiret
$retour = preg_replace("#\-{2,}#", "-", $retour);

//supprime les tirets à la fin
$retour = rtrim($retour, '-');
//et au début
$retour = ltrim($retour, '-');

//en fin, on retourne la chaine convertie, prêt à être utilisée pour l'URL rewriting !
return $retour;

}

Configuration rapide de votre fichier .htaccess : Tutoriel

Le fichier .htaccess, un élément essentiel pour personnaliser le comportement de votre site web. L'une des principales fonctions de ce tutoriel est de vous montrer comment afficher une page PHP sous un format différent, par exemple en utilisant l'extension .html.

Fichier .htaccess

# on active la réécriture d'URL:
RewriteEngine on

# on réécrit notre URL:
RewriteRule ^nom-dans-le-navigateur.html$ la-vraie-page.php [L]
Explication des caractères utilisés


RewriteRule Demande à réécrire la chaine qui suit

^ Indique que le chaine doit commencer par le caractère qui le suit

$ Indique que la chaine doit se terminer par (dans l'exemple : si on tape dans le navigateur nom-dans-le-navigateur.html, ça matchera et affichera en réalité la-vraie-page.php) le-nom-dans-le-navigateur.html ou nom-dans-le-navigateur.htm ne fonctionnera pas

[L] On appel cela un drapeau (flag) L permet d'arrêter la recherche de règle si cette règle satisfait la demande


Dans certains cas, vous pourriez avoir besoin d'utiliser des identifiants de base de données dans l'URL de votre site web. Vous pouvez gérer ces identifiants de manière transparente.

Fichier .htaccess : Utilisation avec des identifiants de base de données dans l'URL

# Vous pouvez utiliser les expressions régulières dans htaccess, pour un id ce sera:
RewriteRule ^nom-dans-le-navigateur-([0-9]+).html$ la-vraie-page.php?id=$1 [L]

# ici (entre parenthèses), on demande à ce que ce soit un chiffre de 0 à 9 (une unité seulement) "[0-9]" mais avec le signe +, il peut aussi être un nombre plus grand (ex: 234)

# L'entourer de parenthèses nous permet de le récupérer plus loin avec dollar1 ($1)

# Si vous avez plusieurs paramètres dans l'URL, ce nombre augmente au fur et à mesure que vous utilisez de parenthèses, exemples avec deux paramètres:
RewriteRule ^([a-z-]+)-([0-9]+).html$ la-vraie-page.php?id=$2&nom=$1 [L]

# ici on demande à ce que ce soit une lettre de a à z (en minuscule, si vous voulez aussi les majuscules, il faut rajouter A-Z dans l'expression, comme ceci: [a-zA-Z-]) et avec le signe +, il peut aussi être une chaine de caractères. Le tiret est accepté, ex qui fonctionnera avec cette expression: ma-chaine-12345.html

#vous remarquerez que j'ai mis id=$2 car les parenthèses des nombres sont en second dans la réécriture (c'est pour l'exemple, en réalité pour un lecture plus aisée, je conseil de mettre 1 en premier puis 2...)
Astuce Apache :

Si vous avez besoin de gérer des paramètres dans l'URL, comme :
nom-dans-le-navigateur.html?param=1&etc=...

Vous devez utiliser le drapeau QSA (Query String Append) en complément de la règle de réécriture. Cela permet de conserver les paramètres existants et d'en ajouter de nouveaux à la volée.

Par exemple :
.htaccess

RewriteRule ^nom-dans-le-navigateur.html$ la-vraie-page.php [L,QSA]

En utilisant le drapeau QSA, vous assurez que les paramètres de l'URL d'origine sont conservés et que les nouveaux paramètres sont ajoutés pour une gestion supplémentaire des paramètres dans vos URL réécrites.

J'espère que ce script gratuit vous est utile.
Pour soutenir mon travail, un simple don ou mettre une note est grandement apprécié.
Votre réussite en ligne commence ici

Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.

Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.

Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :

Demander un devis
Réponse rapide !

Vous recherchez un script précis ?

Dites-moi ce dont vous avez besoin, je peux développer le script demandé et vous envoyer un mail dès qu'il est dispo !

🔔 Vous pouvez laisser votre mail pour recevoir les nouveaux scripts. Pas de pub, pas de tracas. Vous êtes libre de le supprimer à tout moment.

Je prends en compte toutes les demandes. Les idées les plus populaires passent en priorité et seront publiées dès qu'elles seront prêtes. 2853 demandes reçues.

Si vous avez un projet en tête, je vous suggère de me contacter directement pour en discuter.

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo1
Commenter

Natacha le 03 Juin 2022 à 12:20

Super ! merci pour ce tuto, clair et précis ça fonctionne parfaitement
Natacha

Malcolm le 08 Août 2022 à 10:01

Bien le bonjour,

J'ai suivi votre méthode ainsi que bien d'autres sur le web et je me retrouve face à un problème.
J'ai des pages php dont une page https://monsite.fr/article.php?id=1 avec un id pour chacun de mes articles dans ma base de données.
Je désire une url plus jolie du style https://monsite.fr/article/6 et pourquoi pas, par la suite avoir une url : https://monsite.fr/article/categorie/url_article
Cependant, je n'y arrive pas.
Mon fichier htaccess contient :
RewriteEngine On
RewriteRule ^article/([0-9]+)$ /article.php?id=$1 [L]

Lorsque je rentre https://monsite.fr/article/6
j'ai bien ma page article qui s'affiche sans style css car je n'ai pas encore modifié les chemins, cependant, le $_GET['id'] ne renvoie rien, je n'ai donc pas de contenu extrait de ma base de données.

J'ai fait un test pour rediriger en cas d'erreur 404 vers une page plus personnelle est cela fonctionné

Auriez-vous une explication ou ai-je fait une erreur dans le fichier htaccess ?

En vous remerciant par avance.

admin le 08 Août 2022 à 10:04

Bonjour, enlevez le / devant /article.php et dite moi si ça résolve votre problème.

Malcolm le 08 Août 2022 à 13:38

Malheureusement non, j'ai toujours la page qui s'affiche sans le CSS (normal) et surtout sans le contenu de ma bdd.

Quand j'essaie https://monsite.fr/article, j'ai la page article qui s'affiche avec le CSS, mais sans contenu également.

Merci de votre réponse

admin le 08 Août 2022 à 13:43

essayez simplement ceci pour voir si votre htaccess fonctionne :

# on active la réécriture d'URL:
RewriteEngine on
# on réécrit notre URL:
RewriteRule ^mon-article$ article.php [L]


Ne mettez pas article avec article.php mais mon-article avec article.php car PHP peut afficher les fichier PHP sans son extension si apache est configuré pour.

Malcolm le 08 Août 2022 à 13:48

Désolé, mais je n'ai pas très bien compris.

Je dois copier-coller ça :

RewriteRule ^mon-article$ article.php [L]

Ou je dois remplacer quelque chose ?

admin le 08 Août 2022 à 13:49

Dans votre htaccess mettez seulement le code entier que je vous ai collé.

admin le 08 Août 2022 à 14:06

Je vois que votre site n'affiche pas votresite/mon-article (404)

Avez-vous bien mis le code dans le htaccess ? le htaccess est il à la racine de votre site ?

Malcolm le 08 Août 2022 à 14:11

Alors, j'ai bien copier-coller votre code.
Pour le fichier .htaccess, il se trouve dans mon espace web / dans lequel, j'ai un dossier Eceauenvirronement, dans lequel, j'y ai mis tout mon site web donc le fichier .hatccess qui lui se trouve dans aucun sous-dossier

admin le 08 Août 2022 à 14:12

Chez 1&1 vous avez peut une page pour gérer le htaccess plutôt qu'un fichier htaccess ? car le htaccess n'a pas l'air d'être prix en compte...

Malcolm le 08 Août 2022 à 14:21

Je vais me renseigner et vérifier, mais je n'ai rien trouvé pour l'instant.

Merci de votre aide

Malcolm le 08 Août 2022 à 14:46

Désolé, c'est encore moi.
J'ai créé un dossier article dans ma racine.

Suite à cela quand je prends la page https://monsite.fr/article/7 j'ai bien le contenu qui s'affiche (YES). Le css toujours pas, mais je n'ai pas mis les bons chemins.
Par contre, quand je vais sur la page de base : https://monsite.fr/article.php?id=7, je ne suis pas redirigé automatiquement vers l'url https://monsite.fr/article/7

Mais c'est déjà un bon début ! ou pas ;)

admin le 08 Août 2022 à 14:56

OK, super.

C'est normal que vous n'êtes pas redirigé car c'est à vous de mettre vos nouvelles URL dans votre code source, les robots viendront les indexé et personne ne verra article.php?id=* mais les URL que vous mettrez : article/*

Malcolm le 08 Août 2022 à 14:59

Merci infiniment du temps que vous avez prit à répondre à mes demandes ! Merci aussi pour les scripts !!

Retour à la liste des scripts

Un site à créer ?
Contactez-moi