首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有重定向的rails可选路径范围

带有重定向的rails可选路径范围
EN

Stack Overflow用户
提问于 2017-02-05 02:55:09
回答 1查看 1K关注 0票数 2

Rails文档说:

代码语言:javascript
运行
复制
# 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更好的用户体验。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-05 14:58:12

若要重定向不正确的区域设置,请在作用域后面添加以下内容:

代码语言:javascript
运行
复制
get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")

若要重定向缺少区域设置,请从以下位置更改作用域:

代码语言:javascript
运行
复制
scope '(:locale)', locale: /en|nl/ do

至:

代码语言:javascript
运行
复制
scope ':locale', locale: /en|nl/ do

这样,区域设置不再是可选的。最后,重定向缺少区域设置的路径:

代码语言:javascript
运行
复制
get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"),
  constraints: lambda { |req| I18n.available_locales.none? { |locale| req.path.starts_with? locale.to_s } }

最终结果:

代码语言:javascript
运行
复制
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 } }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42048087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档