Rails 301 从 /de 重定向到 /de/

Rails 301 Redirection from /de to /de/

如何从

进行重定向

http://bla.com/de to http://bla.com/de/

我试过了

get '/de', to: redirect('de/', status: 301)


get "/de" => redirect("/de/")

但是我有一个错误 错误:重定向太多

我的错误在哪里?

 [Anonymous user] Started GET "/de" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200
[Anonymous user] Started GET "/de/" for 127.0.0.1 at 2018-12-28 11:03:15 +0200

首先,rails不区分正斜杠或尾斜杠。这就是您收到太多重定向错误的原因。

实现此目的的一种方法是在 ApplicationController 中定义一个方法,然后将其用作过滤器来重定向您的请求

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

或者您可以使用 rack-rewrite 在您的 Rails 应用中在机架级别执行相同的任务。

https://github.com/jtrupiano/rack-rewrite

config.middleware.insert_before 0, Rack::Rewrite do
  r301 '/de', '/de/'
end

另一种可能有用的方法是:

get '/de', :to => redirect('de/'), :constraints => lambda {|r| !r.original_fullpath.end_with?('/')}

希望对您有所帮助!!