在将旧网址重定向到新网址后,Rails重定向网址会给出302而不是301状态

时间:2017-05-04 05:51:25

标签: ruby-on-rails

我刚刚在rails应用程序上实现了friendly_id。我把改变推向了生产。以前的网址是:

https://example.com/search?category_id=1

实施friendly_id后,就像这样

https://example.com/search?category_id=name

我的控制器代码,用于将旧网址重定向到新网址,如下所示:

if params[:category_id].present? and params[:category_id].to_s !~ /\D/
       category = Category.find_by_id(params[:category_id])
       return redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.slug)) if category.present?

当测试人员开始测试SEO优化时,他们发现网址重定向产生了一种奇怪的状态。就像它来自 302 - > 301 - > 200 。应该在哪里生成 301 状态。怎么解决这个问题?如何让它生成 301 状态?

1 个答案:

答案 0 :(得分:1)

您可以使用status例如

传递redirect_to选项
redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.slug)), status: 301 if category.present?

了解更多here

另外,我很好奇为什么你需要return?如果你真的需要,我认为正确的语法应该是redirect_to and return,例如

if params[:category_id].to_s !~ /\D/ && Category.find_by_id(params[:category_id])
   return redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.slug)) and return