Gestion des variables GET dans mon HTACCESS

Par OhhRaj, il y a 9 ans


Bonsoir,
J'ai un site avec un système de réécriture d'url pour une meilleur organisation mais j'ai besoin de récupérer une variable GET mais je n'y arrive pas. Voici mon htaccess ( à la racine )

RewriteEngine on RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1

Et voici ma page index.php ( à la racine )

<?php session_start(); $allowed = array( 'home' ); $parameter = explode('/', $_GET['p']); if(empty($_GET['p'])){ include_once('controller/home.php'); $launch = new home(); } else{ $controller = $parameter[0]; if(in_array($controller, $allowed)){ switch(count($parameter)){ case 1: include_once('controller/'.$controller.'.php'); $launch = new $controller(); break; case 2: $action = $parameter[1]; include_once('controller/'.$controller.'.php'); $launch = new $controller(); if(method_exists($controller, $action)){ $launch->$action(); } else{ include_once('view/404.html'); } break; case 3: $action = $parameter[1]; $add = $parameter[2]; include_once('controller/'.$controller.'.php'); $launch = new $controller(); if(method_exists($controller, $action)){ $launch->$action($add); } else{ include_once('view/404.html'); } break; default: include_once('view/404.html'); break; } } else{ include_once('view/404.html'); } } ?>

Voila merci d'avance, je ne demande pas forcément une réponse mais j'ai beau cherché sur Google je trouve des solutions qui ne fonctionnent pas ou que je sais pas faire fonctionner plutôt.

3 réponses

SLK, il y a 9 ans

Salut,

sur apache, la réécriture d'url est bien activée aussi ?

Sur quel lien est-ce que tu clic ? (je voudrai voir le "href")

Donne nous aussi l'emplacement de ces 3 fichiers :

  • le fichier qui contient le lien sur lequel tu clic (celui dont j'aimerai voir le "href")
  • le htaccess
  • index.php (il est à la racine ? Ou peut-être dans un dossier "racine/public" ou autre ?)
OhhRaj, il y a 9 ans

Salut,
Alors je suis sous Apache et oui la réécriture est activée. Je n'ai pas de href particulier pour l'instant j'aimerais juste que quand je rentre un lien du style http://example.com/contact?email=email@domain.com, je traite ces informations en appelant une classe contact et en passant en paramètre les variables GET dans la fonction construct. Voici l'organisation de mon site :

  • Site
    • controller
      • contact
    • model
    • view
    • index.php
    • .htaccess
SLK, il y a 9 ans

Je ne suis pas sur de bien comprendre.
Moi j'aurai fais quelque chose comme ça (dis moi si ça convient ou pas) :

Vu ton arborescence,
tu peux mettre un define dans ton index.php de la sorte :

// index.php define('BASE_URL', '/chemin/vers/dossier/racine/du/site/dossier_du_site/');

Ensuite, on va dire que dans ta vue ".../Site/view/home.php" il y a un menu avec plusieurs liens ("Contact" par exemple).
Alors il faut écrire :

<?php // home.php echo '<a href="' . BASE_URL . 'Contact/' . $email . '">Contact</a>'; ?>

Et dans le htaccess :

RewriteRule ^Contact/(.*)/?$ index.php?p=contact&email=$1 [L]

Il faut remplacer le .(étoile) par une vraie vérification d'email.
Je ne l'ai pas fait pour que l'exemple reste simple.