Url rewriting

Résolu
naruto-94 Messages postés 904 Statut Membre -  
naruto-94 Messages postés 904 Statut Membre -
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

1 réponse

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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 :
    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();
    }
    2
    1. naruto-94 Messages postés 904 Statut Membre 188
       
      superbe réponse , merci :)
      0