【问题标题】:Why does my rails automatically decode URL? How can I stop it?为什么我的 rails 会自动解码 URL?我怎样才能阻止它?
【发布时间】:2023-04-10 16:00:01
【问题描述】:

我试图获取这样的 URL:

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。

【问题讨论】:

  • 会不会是您的浏览器修复了网址?
  • 所以aid 应该是1uid 应该是1,而token 应该是其余的?您是否尝试过在路由中添加一个约束来告诉 Rails 保持对您的斜线的脏手?
  • TO user12341234:浏览器也失败了。 TO Hardik:我曾尝试重新启动它,但仍然无法正常工作。什么环境参数可能导致这个问题? to mu太短了:我没有加约束,怎么办?

标签: ruby-on-rails ruby nginx


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢!!它完美地工作。请问“约束:{token:/.*/}”是如何工作的?
猜你喜欢
  • 1970-01-01
  • 2018-07-15
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多