首页 > 解决方案 > Rails 301 从 /de 重定向到 /de/

问题描述

我如何进行重定向

http://bla.com/dehttp://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

标签: ruby-on-railsrubyrouteshttp-status-code-301

解决方案


首先,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?('/')}

希望这可以帮助!!


推荐阅读