0

是否可以让路由器返回错误代码(或整个机架响应)以响应匹配的路由?

例如,我已经从 WordPress 转向了一个自制的博客解决方案。/?tag=ruby搜索引擎正在点击需要返回 406 错误的“ ”等 URL 。相反,路由器尽职尽责地将它们路由到与“ ”相同的位置,/我可以匹配我想要删除的 URL,但我不知道如何处理它们

4

1 回答 1

0

这并不明显,但很有效。

解决方案:

match('/',:query_string=>/.+/).defer_to do |request, params|
  raise Merb::ControllerExceptions::NotAcceptable, 
        "Query String Unknown: #{request.query_string}"
end

解释:

为了触发 406 错误,我们需要引发Merb::ControllerExceptions::NotAcceptable,但如果我们在设置路线时这样做,它完全没有帮助。相反,我们需要等到 Merb 处理请求。这就是defer_to块的作用。当请求进来时,我们会引发错误,它会被捕获并处理,就像我们通过控制器处理这个错误一样。

问题

我最初的问题的目标之一是避免必须经历所有的调度开销。取而代之的是,这个解决方案是通过异常控制器调度的,这在计算上更加昂贵[406,{'content-type'=>'text/plain},['406 Not Acceptable']]

于 2009-08-27T02:10:34.250 回答