为什么我的rails会自动解码URL?我怎么能阻止它?

时间:2015-05-21 05:35:29

标签: ruby-on-rails ruby nginx

我试图获取这样的网址:

http://myweb/api/1/1/NJUimQw0bsJgv%2FqjfpMzCl5CeeL%2BnCQr61UVLBcJCNA%3D%0A

但是,日志文件显示:

ActionController::RoutingError (No route matches [GET] "/api/1/1/NJUimQw0bsJgv/qjfpMzCl5CeeL+nCQr61UVLBcJCNA=%0A"):

似乎rails自动解码URI。我该如何禁用它?

在我的route.rb中:

scope '/api' do
  get '/:aid/:uid/:token' => 'my_apis#show'
end

我的网站是rails 4.2.1,正在使用nginx。

1 个答案:

答案 0 :(得分:2)

您的令牌包含正斜杠(' /')导致问题,修改将解决问题的路线

scope '/api' do
  get '/:aid/:uid/:token' => 'my_apis#show', constraints: { token: /.*/ }
end

segment-constraints使用正则表达式限制动态细分的格式,在您的情况下,动态细分为token。 Regexp /.*/匹配每个字符(包括正斜杠/

总的来说,它告诉我们uuid之后的每个字符都是token。所以rails在令牌中也包含/