Ruby on rails 在将旧url重定向到新url后,Rails重定向的url将给出302而不是301状态

Ruby on rails 在将旧url重定向到新url后,Rails重定向的url将给出302而不是301状态,ruby-on-rails,Ruby On Rails,我刚刚在rails应用程序上实现了friendly\u id。我把这些变化推到了生产上。以前的url是: https://example.com/search?category_id=1 在实现了friendly\u id之后是这样的 https://example.com/search?category_id=name My控制器将旧url重定向到新url的代码如下: if params[:category_id].present? and params[:category_id].to_s

我刚刚在rails应用程序上实现了
friendly\u id
。我把这些变化推到了生产上。以前的url是:

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

在实现了
friendly\u id
之后是这样的

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

My控制器将旧url重定向到新url的代码如下:

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?

当测试人员开始测试it SEO优化时,他们发现url重定向正在产生一种奇怪的状态。就像它从302->301->200。其中as应生成301状态。如何解决这个问题?如何使其生成301状态?

您可以通过
重定向到
来传递
状态
选项,例如

redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.slug)), status: 301 if category.present?
if params[:category_id].to_s !~ /\D/ && Category.find_by_id(params[:category_id])
   redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.slug)) and return
end
阅读更多

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

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

您可以通过
重定向到
来传递
状态
选项,例如

redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.slug)), status: 301 if category.present?
if params[:category_id].to_s !~ /\D/ && Category.find_by_id(params[:category_id])
   redirect_to search_equipments_path(request.query_parameters.merge(category_id: category.slug)) and return
end
阅读更多

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

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