Rails 301 Redirection от / де к / де / - PullRequest
0 голосов
/ 28 декабря 2018

Как я могу сделать перенаправление с

http://bla.com/de на 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

1 Ответ

0 голосов
/ 28 декабря 2018

Во-первых, рельсы не различают косую черту и косую черту.Вот почему вы получаете слишком много ошибок перенаправлений.

Один из способов добиться этого - определить метод в ApplicationController, а затем использовать его в качестве фильтра для перенаправления ваших запросов

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

Или выможно использовать перезапись в стойке для выполнения той же задачи в приложении 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?('/')}

Надеюсь, это поможет !!

...