2010-03-11 7 views
1

Je pense que c'est un peu une question noob, mais voilà.GET variables et jolis urls

J'essaie d'obtenir une meilleure compréhension des variables $ _GET en PHP. Beaucoup de CMS etc convertissent des choses comme site.com/?ID=42 en quelque chose comme site.com/42

Ma question est, qu'arrive-t-il aux variables $ _GET quand cela se produit? J'essaie d'imprimer le tableau GET au chargement de la page, et il est vide.

Répondre

1

Si vous transmettez des arguments de cette manière, ils ne seront plus des variables GET car ils ne sont pas transmis en utilisant la syntaxe ? GET traditionnelle. Ils font juste partie de l'URL, qui sera analysée par le framework "CMS" que vous utilisez. Cependant, si vous transmettiez une variable GET "traditionnelle" et souhaitez la lire sur le serveur, vous devrez consulter la documentation du CMS. Si le framework utilise de jolies URL, il supprimera probablement toutes les variables GET, car elles ne sont plus nécessaires. Par exemple, le framework CodeIgniter MVC (pas un CMS seul, mais peut être utilisé pour les construire) le fait.

1

Vous pouvez faire quelque chose comme site.com/42 et conserver une variable GET de ID = 42 en ajoutant une règle de réécriture appropriée. Par exemple, en supposant que vous utilisez Apache Web Server, vous pouvez modifier votre fichier .htaccess (situé dans votre répertoire Webroot) avec les éléments suivants:

RewriteEngine On 
RewriteRule ^(.*) /?id=$1 [L] 
3

La façon dont ils le font est d'utiliser mod_rewrite

Fondamentalement vous avez la demande webserver URI « réécrire » à quelque chose d'autre, de sorte que vous avez des demandes entrantes comme

http://your.site.com/Page/arg1/arg2/arg3 

Mais avec votre rewrite rule, vous avez des demandes de tour Apache qui correspondent à ce modèle (toutes les demandes liées à/page) dans:

http://your.site.com/Page?a=arg1&b=arg2&c=arg3 

Vous seriez finalement en PHP ont _GET $ [ 'a'], $ _GET [ 'b'] et $ _GET tous ensemble à des valeurs [ 'c'].

Découvrez this book

1

La chose est, ce n'est pas, la variable devient juste plus variable GET partie de l'URL. Ces URL sont ensuite analysées par l'application. La plupart des cadres MVC suivent la règle de /controller/action/params et de briser l'URL vers le bas en fonction de la position de la partie:

  • Première /controller partie détermine le contrôleur à utiliser
  • Deuxième partie /action détermine la méthode à appeler
  • Tous le paramètre suivant est juste passé comme argument à la fonction réceptrice, la signification dépend de la fonction et de l'ordre
  • Certains utilisent aussi des paramètres nommés comme /page:2, donc ils ne doivent pas dépendre de la bonne commande

Cela peut être personnalisé. Vous pouvez également utiliser votre serveur Web (par exemple, Apache) pour réécrire ces types d'URL dans de bonnes vieilles URL de paramètres GET avant même qu'elles ne touchent votre application.