从 routes.rb 重定向一批网址



出于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中处理这种逻辑.

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

# 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

您也可以考虑使用库:

  • https://github.com/vigetlabs/redirector:从数据库加载重定向定义的机架中间件。优点:您可以在不更改代码的情况下更新重定向规则。
  • https://github.com/jtrupiano/rack-rewrite:机架重定向中间件。它允许您重定向或重写请求。

你可以在routes.rb中这样做,如下所示:

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

因此,您不需要创建大量静态路由,一个测试就足以为静态路由编写测试。

最新更新