在Rails 3中重定向到规范路由而不会出现斜线

Sha*_*man 4 redirect routing ruby-on-rails canonical-link ruby-on-rails-3

在Rails 3上,我试图从不带斜杠的URL重定向到具有斜杠的规范URL。

match "/test", :to => redirect("/test/")
Run Code Online (Sandbox Code Playgroud)

但是,以上路由同时匹配/ test和/ test /,从而导致重定向循环。

如何使其仅与没有斜杠的版本匹配?

Bla*_*lor 5

您可以在控制器级别强制重定向。

# File: app/controllers/application_controller.rb
class ApplicationController < ActionController::Base

  protected

  def force_trailing_slash
    redirect_to request.original_url + '/' unless request.original_url.match(/\/$/)
  end
end

# File: app/controllers/test_controller.rb
class TestController < ApplicationController

  before_filter :force_trailing_slash, only: 'test'  # The magic

  # GET /test/
  def test
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)