2008-12-31 8 views
1

J'écris une application qui obtient des données à partir d'URL, mais je veux en faire une option, que l'utilisateur utilise ou non des URL «propres» (ex: http://example.com/hello/world) ou urls "sales" (ex: http://example.com/?action=hello&sub=world).Meilleure façon d'obtenir des données à partir d'URL «propres» et «sales»

Quel serait le meilleur moyen d'obtenir des variables à partir des deux schémas d'URL?

+0

Est-ce seulement ces deux options? Ou pouvez-vous avoir http://example.com/hello?sub=world ou http://example.com/world/hello? Qu'en est-il de http://example.com/hello/world?action=somethingelse&sub=different? –

Répondre

3

Si votre mod_rewrite a une règle comme suit:

RewriteRule ^hello/world /?action=hello&sub=world [NC,L] 

ou, plus généralisée:

// Assuming only lowercase letters in action & sub.. 
RewriteRule ^([a-z]+)/([a-z]+) /?action=$1&sub=$2 [NC,L] 

alors le même script PHP est appelé, avec les $_REQUEST variables disponibles ne importe quelle manière l'utilisateur accède à la page (URL sale ou propre).

Nous avons récemment déplacé une grande partie de notre site pour nettoyer urls (en soutenant les plus âgés, « sales » urls) et des règles comme ci-dessus signifie que nous ne devions pas réécrire tout le code qui reposait sur $_REQUEST params, seule la règles mod_rewrite.

Mise à jour

Mod_rewrite est un module Apache, mais il y a un certain nombre d'options available for IIS aussi.

Quel que soit le serveur Web que vous décidez de prendre en charge, l'approche mod_rewrite se traduira probablement par le moins de travail pour vous. Sans cela, vous devrez probablement créer une charge de fichiers pour imiter la structure de vos URL propres, par ex. dans la racine de votre serveur Web que vous souhaitez créer un répertoire hello, en plaçant un fichier world en elle, contenant quelque chose comme ce qui suit:

// Set the $_REQUEST params to mimic dirty url 
$_REQUEST['action'] = 'hello'; 
$_REQUEST['sub'] = 'world'; 
// Include existing file so we don't need to re-do our logic 
// (assuming index.php at web root) 
include('../index.php'); 

Comme le nombre de paramètres que vous souhaitez gérer les augmentations « proprement », de même le nombre des répertoires et des fichiers de raccord dont vous avez besoin, ce qui augmentera considérablement votre charge de maintenance. Mod_rewrite est conçu pour exactement ce genre de problème, et est maintenant supporté sur IIS ainsi que sur Apache, donc je vous recommande vivement d'aller dans cette direction!

+0

Le seul problème ici est que je veux supporter plus que juste Apache, donc l'utilisation d'un .htaccess ne fonctionnerait pas. –

0

ressemble à une douleur, mais je suppose que créer une fonction qui analyse l'URL pour chaque demande. D'abord déterminer si c'est "sale" ou "propre" URL. Pour cela, je chercherais d'abord la présence du caractère point d'interrogation et procéderais à partir de là (des vérifications supplémentaires seront évidemment nécessaires). Pour l'URL "sale", utilisez les capacités normales de récupération de méthodes Get de PHP ($ variable_name). Pour le "propre", j'utiliserais les expressions régulières. Ce serait le moyen le plus flexible (et efficace) pour analyser l'URL et extraire les variables potentielles.

1

Si votre application fonctionne sur le serveur Apache, je recommande l'utilisation de mod_rewrite. Fondamentalement, vous codez votre application pour utiliser des URL «sales» à l'intérieur. Ce que je veux dire par là, c'est que vous pouvez toujours utiliser les URL "propres" dans les modèles et autres, mais vous utilisez la version "sale" lors de l'analyse de l'URL. Comme, vous êtes réel et "Diry" URL est www.domain.com/index.php?a=1 & b = 2, à l'intérieur de votre code, vous allez toujours utiliser $ _GET ['a'] et $ _GET ['b']. Ensuite, avec la puissance de mod_rewrite, faites juste en sorte que les URL comme www.domain.com/1/2/ pointent vers l'URL "sale".(Ceci est juste un exemple de la façon dont les choses peuvent être faites)

0

Un moyen rapide et sale pourrait être de simplement vérifier les variables GET. S'il y en a, c'est sale, sinon, c'est propre. Bien sûr, cela dépend de ce que vous entendez exactement par URL sales.

Questions connexes