2010-05-28 8 views
6

J'ai remarqué que certains sites (y compris l'ancien http://careers.stackoverflow.com 1.0) ont des chaînes de requête qui ressemblent à ceci:Quelle est la différence entre/123 et /? 123?

http://somewebapp.example/?123

par rapport à:

http://somewebapp.example/123 ou http://somewebapp.example/id/123

Quels sont les raisons pour lesquelles les développeurs choisissent de mettre en œuvre les URL de leurs applications web en utilisant le premier exemple au lieu des deuxième et troisième exemples?

Et en prime, comment implémenter le premier exemple en PHP, étant donné que 123 est la clé primaire d'une ligne dans une table de base de données? (J'ai juste besoin de savoir comment récupérer 123 de l'URL, je sais déjà comment interroger la base de données pour une clé primaire de 123.)

EDIT [5/28]: Oops, oublié de tout le monde sache que je sais ce que sont ces deux dernières URL, comment elles fonctionnent et comment les mettre en œuvre. Merci pour les rappels cependant, je pense que j'avais quelques idées fausses sans rapport qui ont été clarifiées par hasard de toute façon!

Répondre

9

Le premier est plus facile à implémenter; tout après le? fait partie de la chaîne de requête. Le serveur Web charge la page spécifiée avant le?, Et gère la chaîne de requête séparément (en PHP il est accessible via $_GET)

Dans le deuxième exemple, le développeur doit configurer le serveur Web pour rediriger toutes les demandes vers une page spéciale (car il n'y a pas de page /123 sur le serveur), qui sera ensuite analyser l'URL pour savoir ce qui a été demandé

Quant à votre dernière question, la 123 montrera en $_GET comme une clé, donc key($_GET) travaillerait en supposant c'est la seule chose que vous passez dans la chaîne de requête

+0

Merci d'avoir accepté de répondre aux deux questions Je ne me suis pas rendu compte que c'était si simple de saisir la clé – BoltClock

0

Le premier exemple est une chaîne de requête; les deuxième et troisième exemples ne le sont pas. En savoir plus sur les URL de What Every Developer Should Know About URLs Pour utiliser l'ID de la chaîne de requête, vous devez l'analyser à l'aide d'une bibliothèque appropriée.

0

Quelles sont les raisons pour lesquelles les développeurs choisissent de mettre en œuvre les URL de leurs applications Web en utilisant le premier exemple au lieu des deuxième et troisième exemples?

Esthétique. Lire à propos de cool URIs pour obtenir de bons conseils sur la façon de concevoir des URI.

comment peut-on mettre en œuvre le premier exemple en PHP

Vous cherchez $_SERVER['PATH_INFO'] mais attention: certains fournisseurs d'hébergement mis des trucs faux là-dedans.

Dans ces situations, vous devrez utiliser mod_rewrite ou similaire.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(\d+) /index.php?id=$1 [L,QSA] 

De cette façon, vous pouvez obtenir l'ID de $_GET['id']

+0

Est-ce purement pour les faire ressortir des URL habituelles 'PATH_INFO' qui sont si courantes de nos jours? – BoltClock

0

Cela a fait faire des règles ModRewrite ou configurations apache. Certains frameworks tels que Code Ignitor utilisent ces routes pour vous diriger vers une page qui n'existe pas techniquement à cet emplacement physique. Il est analysé et le cadre détermine quelle vue est appropriée à afficher. Certaines règles permettent au serveur Web de transmettre quoi que ce soit après le paramètre/pour déterminer si une route valide est disponible à partir de l'infrastructure. Certains systèmes ne le font pas automatiquement et donc un point d'interrogation est placé pour le forcer à passer à l'infrastructure comme route

Si vous souhaitez obtenir le 123 de la première instance, vous devez tirer la requête query_string

1

Vous pouvez y accéder à partir de PHP en utilisant

$_SERVER['QUERY_STRING'] 
1

La première URL utilise des paramètres de requête pour envoyer les données. Ce dernier est une forme de REST URL qui est en fait pointer vers une ressource avec ID 123

0

Si vous utilisez Apache (et vous pouvez faire la même chose sur d'autres serveurs, mais je ne connais pas les détails), quelque chose le long ces lignes feront un truc intéressant:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.+)$ index.php/$1 
</IfModule> 

règle: Si la page demandée est pas un fichier !-f ou un répertoire !-d puis, au lieu de donner une erreur page not found, charge index.php et passer le chemin demandé sur ce script dans la forme de $_SERVER['PATH_INFO'] (il peut également être extrait de $_SERVER['REQUEST_URI']

Ou vous pourriez dire à Apache de réécrire à index.php?$1, auquel cas le chemin pourrait être extrait de $_SERVER['QUERY_STRING']. (Dans ce cas, vous devez utiliser l'argument QSA pour ajouter la chaîne de requête en cours (le cas échéant)

Questions connexes