Bonjour à tous et à toutes,

Je vous explique mon problème en espérant que vous pourrez m'aider à le ressoudre.

J'ai suivi le tuto " Décomposer un site en PHP avec ob_Start " jusqu'à la aucun souci mais j'aime me compliquer les choses : p

À la fin du tuto de Grafikart on termine le .htaccess avec le code suivant :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]

Le souci c'est que je code en ce moment un Forum et pour les catégories j'ai le lien suivant :

http://localhost/newdeltacraft/forum?categorie=Animaux

Et je voudrais pouvoir le transformer pour qu'il soit comme cela :

http://localhost/newdeltacraft/forum/Animaux

Merci a tous d'avance :)

Dylan

5 réponses


tleb
Réponse acceptée

Est-ce que tu sais ce que l'.htaccess fait ? J'en ai pas l'impression.

# démarrer le moteur de reécriture d'URL
RewriteEngine On

# si un dossier est demandé, ne pas exécuter la prochaine règle
RewriteCond %{REQUEST_FILENAME} !-d

# si un fichier est demandé, ne pas exécuter la prochaine règle
RewriteCond %{REQUEST_FILENAME} !-f

# tout rediriger vers index.php et lui donné en paramètre GET p=forum/Animaux dans ton exemple
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]

Tu devrais maintenant comprendre que tout le traitement se passe côté PHP, avec des bons vieux explode, if, etc...

DylanVsn
Auteur

Re bonjour,

Pourrais tu m'aider un petit peut stp car a chaque foie que je touche a ce code tous le reste plante..

define("WEBROOT", "/newdeltacraft/");
    if(!isset($_GET['p'])){ $_GET['p'] = 'index'; }
    if(!file_exists("content/".$_GET['p'].".php")){ $_GET['p'] = '404'; }
    ob_start();
    if(preg_match("#^[a-zA-Z0-9/-]+$#", $_GET['p'] )){
        include "content/".$_GET['p'].".php";
    }else{
        header('location: 404');
    }
    $content = ob_get_contents();
    ob_end_clean();

    include 'template.php';

Merci encore de ton aide

  • C'est à dire "plante" ? Une erreur un peu plus précise ?
  • Récupère $_GET['p'] pour la traiter, ça donnera un code plus lisible ;
  • Est-ce que tu as un fichier content/404.php ?
  • Ta regex répond à à peu près tout, c'est normal ? C'est juste pour refuser les charactères étranges ?
DylanVsn
Auteur

J'ai réussi :D J'ai simplement utilisé la variable $_SERVER que j'ai explode pour récuperer l'indice 2.

Voici le code final, tu me dira ce que tu en pense :

    define("WEBROOT", "/newdeltacraft/");
    if(!isset($_GET['p'])){ $_GET['p'] = 'index'; }
    ob_start();
    if(preg_match("#^[a-zA-Z0-9/-]+$#", $_GET['p'] )){
        /* Nouvelle Lignes de code */
        $url = $_SERVER['REQUEST_URI'];
        $newurl = explode("/", $url);
        if($newurl[2] == 'forum'){
            include "content/forum.php";
        }else{
            if(!file_exists("content/".$_GET['p'].".php")){ $_GET['p'] = '404'; }
            include "content/".$_GET['p'].".php";
        }
        /* Fin des nouvelles lignes de code */
    }else{
        header('location: 404');
    }
    $content = ob_get_contents();
    ob_end_clean();

    include 'template.php';

Pourrais-tu nous donner un exemple de ce que tu peux avoir dans $_GET['p'] ?