Url rewriting
Résolu/Fermé
naruto-94
Messages postés
865
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
20 décembre 2012
-
19 oct. 2010 à 23:23
naruto-94 Messages postés 865 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 20 décembre 2012 - 20 oct. 2010 à 20:59
naruto-94 Messages postés 865 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 20 décembre 2012 - 20 oct. 2010 à 20:59
1 réponse
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 505
20 oct. 2010 à 14:16
20 oct. 2010 à 14:16
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(); }
20 oct. 2010 à 20:59