Restaurer la variable $_GET après une réécriture d’URL

Lorsqu’on utilise une réécriture d’URL (URL Rewriting pour les anglophones), la variable $_GET est remplie d’après les règles de réécriture dictées dans le fichier .htaccess, malheureusement on perd les autres paramètres passés en GET.

Voici donc un snippet permettant de rétablir l’ordre dans sa variable $_GET :

Le principe :

Le principe est simple, on reprend l’URL de base, stockée dans $_SERVER['REQUEST_URI'], puis on va la découper pour récupérer les paramètres qui lui sont passés.

Le code :

preg_match_all('/[\&\?]([^\&]+)=([^\&]+)/', $_SERVER['REQUEST_URI'], $matches);//Découpage de l'URL
foreach($matches[1] as $k => $v) {
    if (!isset($_GET[$v]))
        $_GET[$v] = $matches[2][$k];//Injection dans la variable $_GET
}

Nous voici désormais avec un variable $_GET complète :)

Edit : Godefroy me précise qu’on peut simplement utiliser le paramètre [QSA] en face de sa règle de réécriture ^^ (il me suffisait de lire la doc du mod_rewrite)




3 Commentaires

  • 19/05/2010 - 22:59 | Permalien

    Ouais ou sinon tu utilises beaucoup plus simplement l’option QSA de RewriteRule ;-)
    cf http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

    • 20/05/2010 - 08:06 | Permalien

      Merci pour l’astuce, j’avoue que certains paramètres dans le mod_rewrite me sont étrangers ^^

  • Valentin
    08/04/2012 - 15:26 | Permalien

    Merci, ce code fonctionne parfaitement. :-)

  • Les commentaires sont fermés.