Url rewriting
Résolu
naruto-94
Messages postés
865
Date d'inscription
Statut
Membre
Dernière intervention
-
naruto-94 Messages postés 865 Date d'inscription Statut Membre Dernière intervention -
naruto-94 Messages postés 865 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
je n'ai jamais pratiquer l'url rewriting mais j'ai lu des tutos par-ci par-là quand j'en trouve par hasard et je me demandais (peut-être que ça me servira un jour) si c'était possible par exemple de récupérer un libelle pour le mettre dans l'url au lieu de l'id .
par exemple pour /article.php?id=42 au lieu de /article-42.html je voudrais /article-sur-l-url-rewriting.html (qui correspondrait à l'id 42 dans la bdd)
Merci d'avance
je n'ai jamais pratiquer l'url rewriting mais j'ai lu des tutos par-ci par-là quand j'en trouve par hasard et je me demandais (peut-être que ça me servira un jour) si c'était possible par exemple de récupérer un libelle pour le mettre dans l'url au lieu de l'id .
par exemple pour /article.php?id=42 au lieu de /article-42.html je voudrais /article-sur-l-url-rewriting.html (qui correspondrait à l'id 42 dans la bdd)
Merci d'avance
1 réponse
Salut.
Sur la table contenant les articles, tu peux ajouter un champ nommé "titre_canonique" (par exemple).
Ce champ contiendra le titre transformé pour pouvoir être affiché dans une URL, grâce à cette fonction.
Au niveau du .htaccess, ça ressemblera à ceci :
Dans article.php, il suffira de compter le nombre d'entrée « WHERE id = $_GET['id'] ». S'il y en a aucune, tu affiches une erreur 404, sinon, tu récupères les données de cet article. Si $_GET['canonique'] est égal à $resultat_mysql['url_canonique'], alors tu affiches l'article, sinon, tu fais une redirection vers la bonne adresse.
En PHP, ça donne ceci :
Sur la table contenant les articles, tu peux ajouter un champ nommé "titre_canonique" (par exemple).
Ce champ contiendra le titre transformé pour pouvoir être affiché dans une URL, grâce à cette fonction.
Au niveau du .htaccess, ça ressemblera à ceci :
RewriteRule ^article-([0-9]+)-(.+)$ /article.php?id=$1&canonique=$2
Dans article.php, il suffira de compter le nombre d'entrée « WHERE id = $_GET['id'] ». S'il y en a aucune, tu affiches une erreur 404, sinon, tu récupères les données de cet article. Si $_GET['canonique'] est égal à $resultat_mysql['url_canonique'], alors tu affiches l'article, sinon, tu fais une redirection vers la bonne adresse.
En PHP, ça donne ceci :
<?php require 'config.php'; if(!isset($_GET['canonique']) || !isset($_GET['id'])) { header('HTTP/1.1 404 Not Found'); include 'views/http_errors/404.php'; exit(); } $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS); $sql = 'SELECT COUNT(*) AS nb FROM articles WHERE id = '.(int) $_GET['id']; $req = $pdo->query($sql); $data = $req->fetch(); if($data['nb'] > 0) { $sql = 'SELECT * FROM articles WHERE id = '.(int) $_GET['id']; $req = $pdo->query($sql); $article = $req->fetch(); if($_GET['canonique'] != $article['url_canonique']) { header('HTTP/1.1 301 Moved Permanently'); header('Location: /article-'.$article['id'].'-'.$article['url_canonique']); } else { include 'views/news/news_single.php'; } } else { header('HTTP/1.1 404 Not Found'); include 'views/http_errors/404.php'; exit(); }
naruto-94
Messages postés
865
Date d'inscription
Statut
Membre
Dernière intervention
188
superbe réponse , merci :)