Question .htaccess

Résolu/Fermé
doctorpower Messages postés 359 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 4 décembre 2011 - Modifié par doctorpower le 10/08/2010 à 00:27
doctorpower Messages postés 359 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 4 décembre 2011 - 10 août 2010 à 18:24
Bonjour,

j'aimerai ajouter a certaines URL de mon site des variables "inutiles" par exemple:

site.com/185/partie-inutile-de-l-url

au lieu de:

site.com/185

dans mon fichier .htacces j'ai essayer:

RewriteRule ^id/([0-9]+)/([0-9a-zA-Z]-_/....)$ ............

au lieu de:

RewriteRule ^id/([0-9]+)$ ..............

mais ca ne fonctionne pas...

je pense que c'est possible etant donne que seule l'id est importante (185 dans l'exemple) mais je ne sais pas comment faire...

merci d'avance

2 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
10 août 2010 à 12:35
Salut.

Je pense qu'il faut mettre tous les caractères dans la classe de caractères (entre crochets).

Si c'est pour mettre le titre de la page dans l'URL, il faut quand même utiliser la variable afin de vérifier que le titre soit correcte (en fonction de l'ID de l'article ou de la news). Par exemple :
RewriteRule ^articles/([0-9]+)/(.+)$ lire_article.php?id=$1&titre_url=$2


Dans lire_article.php, récupère le titre au format URL depuis la base de données grâce à l'ID ($_GET['id']).
Ensuite, vérifie que ce que tu as récupéré correspond à $_GET['titre_url'] : si non, alors fait une redirection.

<?php
if(isset($_GET['id']) && isset($_GET['titre_url'])) {
    $pdo = new PDO('mysql:host=localhost;dbname=la_base','root','');

    $sql = 'SELECT COUNT(*) AS nb FROM articles WHERE id = '.(int) $_GET['id'];
    $req = $pdo->query($sql);
    $req->closeCursor();
    $data = $req->fetch();

    if($data['nb'] > 0) {
        $sql = 'SELECT * FROM articles WHERE id = '.(int) $_GET['id'];
        $req = $pdo->query($sql);
        $article = $req->fetch(PDO::FETCH_OBJ);

        if($article->titre_url == $_GET['titre_url']) {
            include 'templates/lire_article.php';
        } else {
            header('Location: /articles/'.$_GET['id'].'/'.$article->titre_url);
            header('HTTP/1.1 301 Moved Permanently');
            header('Status: 301 Moved Permanently');
        }
    } else {
        header('Location: erreur-404.php');
        header('HTTP/1.1 404 Not Found');
        header('Status: 404 Not Found');
    }
} else {
    header('Location: erreur-404.php');
    header('HTTP/1.1 404 Not Found');
    header('Status: 404 Not Found');
}
?>
1
doctorpower Messages postés 359 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 4 décembre 2011 68
10 août 2010 à 18:24
merci avion f-16, j'essaye ca tout de suite
0