[RESOLU] url rewriting et $_GET

Eléphant du PHP | 163 Messages

09 sept. 2015, 23:47

Bonsoir,

J'ai envie d'avoir des url plus propres mais je ne sais pas comment va se comporter mon code avec mes $_GET.

Si j'ai une variable categorie exemple http://www.dook.fr/page.php?categorie=achats
et que je veux http://www.dook.fr/achats/ est-ce que je peux récupérer la valeur de l'url ou pas ?
Comment ca va se comporter ? Merci de votre retour.

do_ok

Mammouth du PHP | 2703 Messages

10 sept. 2015, 00:01

si tu rediriges /achats/ vers page.php en passant le paramètre, alors rien ne change dans page.php pour récupérer le paramètre categorie.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 sept. 2015, 11:56

Bonjour,

Ce que tu souhaites mettre en oeuvre est ce que l'on appel de la réécriture d'url. Ceci peut notamment se faire grâce aux fichiers .htaccess d'Apache dans lequel tu peux utiliser des règles de redirection permettant au serveur de faire correspondre l'url demandé par l'utilisateur avec n'importe quelle page de ton site. Tu peux même si nécessaire récupérer des paramètres de l'url demandée pour les transmettre à ton script.

Il faut naturellement pour cela que ton serveur web autorise la réécriture d'url. Pour apache, il s'agit du mod_rewrite qui permet énormément de choses, mais si l'on se concentre sur ton besoin, la redirection pourrait simplement être de la forme :

Code : Tout sélectionner

RewriteEngine on RewriteRule ^achats/ page.php?categorie=achats [L] ...
A répéter pour chaque redirection de page
Mais on pourrait aussi utiliser une expression régulière si toutes les urls doivent se comporter de la même façon :

Code : Tout sélectionner

RewriteEngine on RewriteRule ^(.+) page.php?categorie=$1 [L]
Bref, cela dépend de la structure de ton site, mais cela devrait déjà te donner une bonne base de recherche et de travail :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 163 Messages

10 sept. 2015, 15:16

Salut, Ok merci Ryle mais concrètement est-ce que je peux faire un $_GET["categorie"] dans mes pages si mon url est sous cette forme :
http://www.dook.fr/achats/

?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 sept. 2015, 09:08

Oui, à condition de procéder à une redirection côté serveur / réécriture d'URL.

L'URL de l'utilisateur ne change pas, il appel bien ton site via "http://www.dook.fr/achats/". Mais ton serveur va intercepter cette requête et renvoyer en réponse ce que lui dicte la page "page.php?categorie=achats" sur laquelle tu peux donc toujours utiliser $_GET pour récupérer la catégorie demandée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 163 Messages

13 sept. 2015, 00:52

Salute !

Ok Ryle donc si je comprends bien c'est valable si mon url ne bouge pas trop. Dans le cas d'une recherche avec plusieurs paramètres qui peuvent être dans le désordre c'est pas valable, hein, c'est ça ? Ex : moteur de recherche de php france...?

do_ok

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 sept. 2015, 08:48

C'est tout à fait possible :)

Si tu regardes l'url de ce sujet sur phpfrance, tu verras que des réécritures sont appliquées pour pouvoir traiter ta demande en php
Ainsi l'url php-debutant/url-rewriting-get-t274543.html est transformée par le serveur pour permettre d'appeler le script php d'affichage des topics "t" et de lui passer en get l'identifiant "274543".

Pour ce qui est du moteur de recherche, les expressions régulières dans le fichier .htaccess te permettent de la même façon de récupérer toutes les infos transmises en get au serveur et de les transmettre à un autre script pour qu'il les traite :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 163 Messages

14 sept. 2015, 11:01

Bonjour,

Oui c'est valable dans le cas où on atteint un topic identifié mais dans le cas d'une recherche exemple :
search.php?keywords=ryle&terms=all&auth ... Rechercher

on peut pas réécrire et récupérer les $_GET ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 sept. 2015, 14:19

Effectivement, les paramètres envoyés dans l'url par un formulaire peuvent difficilement être réécrit pour que l'utilisateur ait une url "propre" tout en te permettant de récupérer toutes les données postées via le formulaire. On doit pouvoir y arriver à coup de javascript pour produire l'url souhaité, mais le gain n'est pas du tout à la hauteur de l'effort que cela demanderait à produire et à maintenir.

Pour un formulaire, si tu ne veux pas polluer l'url, j'aurais tendance à dire qu'il te suffit d'envoyer les données en POST ou lieu de GET :)
L'inconvénient, c'est qu'en cas de réactualisation de la page par le navigateur, celui-ci demande systématiquement si tu veux reposter les données pour des questions de sécurité... mais c'est pas bien méchant :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 163 Messages

16 sept. 2015, 09:40

BIP UP RYLE !
:pouce: