Facebook
Télécharger
Noter:

Ajouté le 2022-01-30
Visionné 5892 fois
5/5 (2)

Tuto PHP rewriting URL

Description

Cette fonction retourne n'importe quel chaine de caractère sans accent et sans caractère autre que des chiffre,lettres et -, elle vous permet de convertir un titre de sujet en chaine de caractères compatibles pour L'URL rewriting, pour votre site, blog ou forum par exemple.

Sont utilisation est simple:

$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){
$c = remplacerAccent($titre);
$retour = '';//notre variable qui sera envoyée en retour est pour le moment vide, on l'initialise
for($i=0;$i<=strlen($c)-1;$i++){//on vérifie les caractères de la chaine, un par un
$caractere = strtolower(substr($c,$i,1));//on met le caractère en minuscule
//on construit notre chaine de retour
$retour .= preg_match("#^[a-z0-9_]+$#",$caractere) ? $caractere : "-";//on remplace tout ce qui n'est pas un chiffre, une lettre, un tiret ou un underscore _, par des -
}
for($i=0;$i<=strlen($c)-1;$i++) {
$retour = str_replace("--","-",$retour);//on enlever les tiret successifs
}
$retour = substr($retour,-1) == "-" ? substr($retour,0,-1) : $retour;//si le dernier caractère est un tiret, on le retire
$retour = substr($retour,0,1) == "-" ? substr($retour,1) : $retour;//si le premier caractère est un tiret, on le retire
return $retour;//en fin, on retourne la chaine convertie, prêt à être utilisée pour l'url rewriting!
}


Configuration de votre .htaccess, tutoriel rapide


Vous pouvez afficher la page PHP de votre choix sous n'importe quel format, par exemple sous le format .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

$ 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

Astuce:

Si parfois vous avez besoin d'accepter des paramètres dans l'URL (ex: nom-dans-le-navigateur.html?param=1&etc=...) utilisez en plus le drapeau QSA, en plus (QSA pour Query String Append):
RewriteRule ^nom-dans-le-navigateur.html$ la-vraie-page.php [L,QSA]



Fichier .htaccess : Utilisation avec des id de la 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...)



Besoin d'un web développeur ?

Je suis disponible, contactez-moi !

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo1memo2
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