昨天我的应用程序被yandex bot访问,网址无效
/restday?biG%D9%02
并为此应用程序抛出错误
ArgumentError: invalid byte sequence in UTF-8
每当出现无效字符错误时,我需要渲染状态为400而不是404的400.html静态页面。我按照此question和rack-robustness gem的解决方案进行了操作,但它没有达到目的,因为它显示404或重定向到特定页面。
我已将以下内容添加到/config/application.rb
require "#{Rails.root}/lib/handle_invalid_percent_encoding.rb"
config.middleware.insert 0, HandleInvalidPercentEncoding
这是我的中间件handle_invalid_percent_encoding.rb
要求'机架'
类HandleInvalidPercentEncoding
def initialize(app) @app = app end def call(env) request = Rack::Request.new(env.dup) temp = request.params rescue :bad_form_data if temp == :bad_form_data error_response else @app.call(env) end end private def error_response # serve static html file end
端
P.S我只有在参数错误是无效编码时才需要渲染错误的请求错误。