2010-07-30 14 views
4

Dans un cadre MVC, j'ai un modèle avec un champ "identificateur". Ce champ peut être tout ce qui est utilisé par l'utilisateur comme identifiant unique. J'utilise ensuite ce champ d'identification dans les URL pour accéder aux ressources pertinentes.Quel est un moyen propre d'utiliser un "/" dans une partie d'une URL

/people/<identifier>/ 

Dans un tel cas, l'utilisateur utilise des identifiants du format 00/000. Le rapide parmi vous aura repéré le problème tout de suite - comment savons-nous quelle partie est l'identifiant, et quelle partie de l'action?

La solution évidente est d'utiliser l'échappement d'URL (% 2F étant le code approprié). Cependant, cela perturbe mon proxy d'équilibrage de charge apache ainsi que le serveur d'application sur notre boîte de démonstration (passager en cours d'exécution). Bien que cela fonctionne très bien sur les serveurs de développement locaux. Les URL incluant% 2F semblent causer 404 erreurs du serveur (pas l'application!). Ce que je cherche est une approche générale pour résoudre ce problème, tout en gardant une URL bien rangée.

La pile à l'origine de ce problème est la suivante: Ruby 1.8.7, Merb 1.0.12, équilibrage de charge Apache vers une grappe fine en production, Passenger sur le serveur de démonstration et utilisation de thin-thin non développé.

+0

C'est un peu en retard, mais voir si double codage des travaux de barre oblique. Votre URL ressemble à 'mod_rewrite' - qui nécessite un double encodage dans certains de ses scénarios (incroyablement agaçant). – pinkgothic

+0

Je n'utilise pas mod_rewrite, apache utilise simplement mod_proxy pour envoyer l'URL à l'application. – Glenjamin

Répondre

1

Vous pouvez toujours utiliser un encodage local qui remplace/avec un autre caractère qui n'est jamais utilisé dans votre champ d'identification, puis le convertit en le lisant à partir de l'URL.

Par exemple:

http://yoursite/people/00/000

devient

http://yoursite/people/00-000

+0

Malheureusement, chaque utilisateur du système utilise un format différent pour leur numérotation - et je dois être en mesure de les soutenir du mieux que je peux. Je suis en train de remplacer "/" par "slash" (le mot) qui semble un peu bête mais qui fonctionne finalement. – Glenjamin

4

Le moyen le plus propre serait d'empêcher l'utilisateur de saisir un caractère barre oblique en premier lieu. S'il est nécessaire de prendre en charge ce format, il n'y a aucun moyen d'utiliser l'URL d'échappement.

+0

Je me suis résigné à devoir utiliser une forme d'échappement pour autoriser ce format - cependant, l'utilisation de l'échappement d'URL standard perturbe le serveur. Je suis après des suggestions pour d'autres méthodes d'échappement qui semblent bien dans la barre d'URL – Glenjamin