Как использовать регулярные выражения в маршруте Rails для перенаправления? - PullRequest
3 голосов
/ 27 апреля 2011

Эта попытка переписать правило в моем маршруте. Rb, вероятно, не требует пояснений:

match "/:user/:photo-thumb.png" => 
      redirect("/%{user}/photos/%{photo}/image?style=thumb"),
      :photo => /[a-zA-Z]+/

Я хочу перенаправить что-то вроде mysite.com/alice/foo-thumb.png на mysite.com/alice/photos/foo/image?style=thumb

Вышеуказанная попытка неверна. Есть идеи по ее устранению?

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

Для меня сработало следующее:

match "/:user/:photo_thumb.png" => 
      redirect{|p| 
        "/#{p[:user]}/photos/#{p[:photo_thumb].split('-')[0]}/image?style=thumb"
      },
      :constraints => { :photo_thumb => /[a-zA-Z]*\-thumb/ }

Хотелось бы найти более простой способ сделать это.(Как указывает Тэдман, мне может быть лучше сделать это с перезаписью nginx. Смотрите этот связанный вопрос: Routes.rb vs rack-rewrite против правил nginx / apache rewrite )

3 голосов
/ 27 апреля 2011

У вас может быть больше удачи с чем-то вроде этого:

match "/:user/:photo.png" => 
  redirect("/%{user}/photos/%{photo}/image?style=thumb"),
  :photo => /\w+\-thumb/

Токены маршрутов могут быть перепутаны с наличием в них дополнительного контента.

Как примечание, такие вещичасто лучше обрабатывается на уровне веб-сервера, например, Apache, nginx или lighttpd, где перенаправления не связывают экземпляры вашего стека Rails.Наличие большой таблицы сопоставления не редкость в приложениях со значительным количеством устаревших ссылок.

...