Как удалить '/' из конца маршрутов Синатры - PullRequest
0 голосов
/ 02 апреля 2020

Я использую Sinatra и сервер ружья.

Когда я набираю http://localhost:9393/tickets, моя страница загружается, как и ожидалось. Но с дополнительным «/» в конце Синатра предлагает добавить

get '/tickets/' do

Как заставить сервер принять дополнительный «/» без создания дополнительного маршрута?

Информация в разделе "" Синатры "Как сделать конечный sla sh необязательным? " выглядит полезной, но это означает, что мне нужно будет добавить этот код для каждого отдельного маршрута.

Есть ли более простой или более стандартный способ сделать это?

Мой маршрут настроен как

get '/tickets' do

1 Ответ

0 голосов
/ 06 апреля 2020

Этот вопрос на самом деле больше, чем кажется на первый взгляд. Следуя совету в « Как мне сделать конечный sla sh необязательным? », проблема решается, но:

  • требуется изменить все существующие маршруты, и
  • это создает проблему «дублированного контента», когда идентичный контент подается с нескольких URL.

Обе эти проблемы решаемы, но я считаю, что более чистое решение - создать перенаправление для всех не root URL, которые заканчиваются на /. Это легко сделать, добавив Sinatra's before filter в существующий контроллер приложения:

before '/*/' do
  redirect request.path_info.chomp('/')
end

get '/tickets' do
  …
end

После этого существующий маршрут /tickets будет работать так же, как и раньше, но теперь все запросы к /tickets/ будут перенаправлены на /tickets перед обработкой в ​​обычном режиме.

Таким образом, приложение будет отвечать как на конечных точках /ticket, так и /tickets/ без необходимости изменять какие-либо из существующие маршруты.

PS: Перенаправление URL root (например: http://localhost:9393/http://localhost:9393) создаст бесконечное l oop, так что вы определенно не хотите сделать это.

...