$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!
}
# 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]
# 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...)
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 !!