Синатра Урл '/' интерпретации - PullRequest
5 голосов
/ 04 октября 2011

Я новичок в рубине и уже довольно давно пробую Синатру, но я не могу понять, почему знак «/» в URL делает такую ​​большую разницу. Я имею в виду не:

get 'some_url' do 
end

и

get 'some_url/' do
end

Предполагается указать на тот же маршрут? почему Синатра считает это разными путями? Я потратил хороший час, чтобы понять это.

Ответы [ 2 ]

2 голосов
/ 08 октября 2011

Согласно RFC 2616 и RFC 2396 (RFC, определяющие идентичность ресурса), эти URL не определяют один и тот же ресурс. Поэтому Синатра относится к ним по-разному. Это особенно. важно, если вы представляете маршрут, возвращающий страницу с относительными ссылками. Эта ссылка

<a href="bar">click me</a>

будет указывать на /bar, если вы идете с /foo, на /foo/bar, если вы идете с /foo/.

Вы можете использовать следующий синтаксис для определения маршрута, соответствующего обоим:

get '/foo/?' do
  # ...
end

Или версия Regexp, упомянутая в комментариях выше.

2 голосов
/ 04 октября 2011

Это разные маршруты. Второй - это URL с расширением каталога ('/'); Первый - это URL без расширения. Многие фреймворки (например, Rails) будут интерпретировать как один и тот же маршрут или добавлять `/ '(например, Django и Apache также могут быть настроены для этого), но технически это разные URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...