首页 > 解决方案 > Ruby on Rails:301 将变量下划线 URL 重定向到连字符 URL

问题描述

这个问题类似但不一样。

/test/foo_bar假设像和的路线/test/foo_bar/8

routes.rb有如下路线:

  get "/test/:id1/:id2", to: "test#super"
  get "/test/:id1", to: "test#duper"

如果目标是 301 将下划线 URL 重定向到连字符版本(例如/test/foo_bar-> /test/foo-bar),是否有 Rails 方式以编程方式执行此操作?或者是否需要为旧的下划线路由手动创建 301 路由?

这适用于 Rails 6.x。

标签: ruby-on-railsrubygemsruby-on-rails-6

解决方案


您可以尝试这样的事情(未经测试):

 get '/test/:id1', to: redirect { |path_params, req| "/test/#{path_params[:id1].dasherize}" }
 get '/test/:id1/:id2', to: redirect { |path_params, req| "/test/#{path_params[:id1].dasherize}/#{path_params[:id2]}" }

我不喜欢这种方法:感觉很老套……但它可能对你有用。


推荐阅读