Rails文档说:
# config/routes.rb
scope "(:locale)", locale: /en|nl/ do
resources :books
end使用这种方法,在没有区域设置的情况下访问资源(如
Routing Error)时将不会获得http://localhost:3001/books。这对于在未指定默认区域设置时使用默认区域设置非常有用。
我希望incorrect/missing地区被重定向.不是路由错误!
例如,访问localhost:3000/asdf/books应该重定向到localhost:3000/en/books
为什么?,因为我继承了一个没有任何限制的应用程序,而google显示了访问一堆随机/无效的地区。我更愿意保持链接工作,是为了改善互联网,并将它们转发到正确的网址。比显示404更好的用户体验。
发布于 2017-02-05 14:58:12
若要重定向不正确的区域设置,请在作用域后面添加以下内容:
get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")若要重定向缺少的区域设置,请从以下位置更改作用域:
scope '(:locale)', locale: /en|nl/ do至:
scope ':locale', locale: /en|nl/ do这样,区域设置不再是可选的。最后,重定向缺少区域设置的路径:
get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"),
constraints: lambda { |req| I18n.available_locales.none? { |locale| req.path.starts_with? locale.to_s } }最终结果:
scope ':locale', locale: /#{I18n.available_locales.join("|")}/ do
resources :books
end
get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"),
constraints: lambda { |req| I18n.available_locales.none? { |locale| req.path.starts_with? locale.to_s } }https://stackoverflow.com/questions/42048087
复制相似问题