在我们的某个控制器上,我们将收到的Google流量转移到无效的网址参数:
/搜索/?克拉斯=论坛
相反,它应该是:
/搜索/?克拉斯=论坛
目前我有一些控制器#index代码执行此操作:
if params[:klass] == "forum"
params.delete(:action) && params.delete(:controller)
params[:klass] = "forums"
@query = params.to_query
redirect_to "/search?#{@query}", :status => 301 and return
end
我很好奇是否可以在routes.rb中这样做,所以它不会打到我们的堆栈但仍然正常301。我已经看到正则表达式用于验证查询字符串中的某些参数,但没有用于重写这些参数的值。
答案 0 :(得分:1)
您可以尝试使用nginx或apache处理它,或者您可以使用Rack使用这个hacky解决方案:
get "/search/" => proc { |env| Rack::Request.new(env).params['klass'] == "forum" ? [ 302, {'Location'=> "/search/?klass=forums" }, [] ] : [ 302, {'Location'=> "/" }, [] ] }
答案 1 :(得分:0)
也许您可以使用:constraints => {:klass => 'forum'}
声明此路线,并使用klass
的正确值转发它。或者你为什么不把失踪的's'追加到控制器中?