从 routes.rb 重定向一批网址
Redirect batch of urls from 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
.
中处理这个逻辑
您可以在 routes.rb 中这样做:
get '/old/path/:id', to: redirect('/new_path_%{id}', status: 301)
所以你不需要创建很多静态路由,一个测试就足够了,而不是为静态路由编写测试。
如果您希望在您的代码库中使用重定向规则,您的方法很好。由于规则是静态的,您可以在创建路由时加载它们:
# 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:从数据库加载重定向定义的 Rack 中间件。优点:您可以在不更改代码的情况下更新您的重定向规则。
- https://github.com/jtrupiano/rack-rewrite: 机架重定向中间件。它允许您重定向或重写请求。
出于 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
.
您可以在 routes.rb 中这样做:
get '/old/path/:id', to: redirect('/new_path_%{id}', status: 301)
所以你不需要创建很多静态路由,一个测试就足够了,而不是为静态路由编写测试。
如果您希望在您的代码库中使用重定向规则,您的方法很好。由于规则是静态的,您可以在创建路由时加载它们:
# 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:从数据库加载重定向定义的 Rack 中间件。优点:您可以在不更改代码的情况下更新您的重定向规则。
- https://github.com/jtrupiano/rack-rewrite: 机架重定向中间件。它允许您重定向或重写请求。