【问题标题】:Redirect batch of urls from routes.rb [closed]从 routes.rb 重定向一批 url [关闭]
【发布时间】:2017-08-17 10:07:07
【问题描述】:

出于 SEO 的目的,我现在必须重定向一堆 url(大约 200 个),以后可能更多,也可能更少。 我想轻松访问它。所以我想有一个包含我需要重定向的所有 url 的专用文件。 类似的东西

# config/seo_redirection_table.yml

- old_path: '/old/path/1'
  new_path: '/new_path_1'
  status: 301 
- old_path: '/old/path/2'
  new_path: '/new_path_2'
  status: 301 

然后在我的routes.rb 中将此文件映射到最顶部。 这是一个好习惯吗?你怎么看 ?以及如何在我的routes.rb 中处理这种逻辑。

【问题讨论】:

  • 如果这些是静态路径,我会使用 Rack 中间件来处理它(而不是 routes.rb)。
  • @Stefan 我想把它放在 yml 中
  • 中间件可以从 yml 文件中读取重定向。
  • 你如何云做到这一点@Stefan?

标签: ruby-on-rails ruby routes seo yaml


【解决方案1】:

如果您希望在代码库中包含重定向规则,那么您的方法很好。由于规则是静态的,您可以在创建路由时加载它们:

# config/routes.rb

require 'yaml'

Rails.application.routes.draw do
  redirects = YAML.load_file('config/redirects.yml')
  redirects.each do |rule|
    get rule["old_path"], to: redirect(rule["new_path"], status: rule["status"])
  end

  # other routes
end

您也可以考虑使用库:

【讨论】:

    【解决方案2】:

    你可以在 routes.rb 中这样做:

    get '/old/path/:id', to: redirect('/new_path_%{id}', status: 301)
    

    因此您无需创建大量静态路由,只需一个测试即可为静态路由编写测试。

    【讨论】:

    • 感谢您的回复。我想把它放在一个专用的 yml 文件中,因为我可以迭代它并匹配潜在的重定向。 old_url 和 new_url 之间没有任何模式或特定关系,我不想写get '/old/path/:id', to: redirect('/new_path_%{id}', status: 301) 200 次 :)
    猜你喜欢
    • 2011-05-31
    • 2016-06-28
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多