2010-07-30 5 views
4

В структуре MVC у меня есть модель с полем «идентификатор». Это поле может быть любым, что используется пользователем как уникальный идентификатор. Затем я использую это поле идентификатора в URL-адресах для доступа к соответствующим ресурсам.Что такое чистый способ использования «/» в части URL-адреса

/people/<identifier>/ 

В одном таком случае, пользователь использует идентификаторы формата 00/000. Быстро среди вас будет сразу выявлена ​​проблема - как мы узнаем, какая часть является идентификатором, и какая часть действия?

Очевидным решением является использование экранирования URL (% 2F - соответствующий код). Однако это путает мой прокси-сервер балансировки нагрузки apache, а также сервер приложений на нашем демонстрационном поле (работает пассажир). Хотя это досадно, это отлично работает на локальных серверах разработки. URL-адреса, включая% 2F, как представляется, вызывают 404 ошибки с сервера (а не приложение!).

Что я ищу - это общий подход к решению этой проблемы, сохраняя при этом аккуратный URL-адрес.

Стек, который вызвал эту проблему: Ruby 1.8.7, Merb 1.0.12, балансировка нагрузки Apache на тонкий кластер при производстве, Пассажир на демо-сервере и работа с непродуманным тонким при разработке.

+0

Это немного поздно, но увидеть, если дважды кодирующая слэш работы. Ваш URL-адрес похож на то, что вы используете 'mod_rewrite', который нуждается в двойном кодировании в некоторых своих сценариях (это невероятно раздражает). – pinkgothic

+0

Я не использую mod_rewrite, apache просто использует mod_proxy для отправки URL-адреса в приложение. – Glenjamin

ответ

1

Вы всегда можете использовать внутреннюю кодировку, которая заменяет/с другим символом, который никогда не используется в вашем поле идентификации, а затем преобразует его обратно при чтении его из URL-адреса.

Например:

http://yoursite/people/00/000

становится

http://yoursite/people/00-000

+0

К сожалению, каждый пользователь системы использует другой формат для их нумерации - и мне нужно иметь возможность поддерживать их насколько это возможно. Я в настоящее время заменяю «/» на «slash» (слово), которое кажется немного глупым, но в конечном итоге работает. – Glenjamin

4

Самый чистый способ заключается в том, чтобы предотвратить ввод пользователем символа прямой косой черты в первую очередь. Если это необходимо для поддержки этого формата, тогда нет возможности использовать экранирование URL.

+0

Я смирился с необходимостью использовать какую-то форму экранирования, чтобы разрешить этот формат - однако использование стандартного экранирования URL-адресов смущает сервер. Я после предложений по альтернативным методам экранирования, которые выглядят красиво в строке URL. – Glenjamin

Смежные вопросы