Url Rewriting

Par DylanVsn, il y a 10 ans


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, il y a 10 ans

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, il y a 10 ans

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

tleb, il y a 10 ans
  • 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, il y a 10 ans

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';
tleb, il y a 10 ans

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