【问题标题】:Rails 4.2: route not matched if url has %2f characterRails 4.2:如果 url 有 %2f 字符,路由不匹配
【发布时间】:2015-02-07 00:34:13
【问题描述】:

似乎当url或路径参数之一中有斜杠字符时,即使它已正确转义,Rails 也无法找到路由...

场景是这样的:

我有这个路由:

get 'request_work_sheet/:item_code/:document_type/:workstation' => 'work_sheets#request_work_sheet'

我尝试创建此链接:

link_to "Document", request_work_sheet_path("CP/121", "master", "WS1")

rails 正确生成了这个 url:

http://localhost:3000/request_work_sheet/CP%2F121/master/WS1

网址似乎正确转义,但一旦我浏览链接,就找不到路线:

No route matches [GET] "/request_work_sheet/CP/121/master/WS1"

如果链接没有斜线字符,则找到路由...

有什么想法吗? (非常感谢提前...)

【问题讨论】:

    标签: ruby-on-rails routes escaping


    【解决方案1】:

    它认为item_code=CPdocument_type=121workstation=master,那么你有一个额外的/WS,它没有映射到任何路线。如果你这样做,你不能在任何参数值中使用 /。

    【讨论】:

    • 我有一个调用我的 Rails 应用程序的第三方应用程序,并且在数据库中项目代码具有斜杠字符 es。 XX/YYY,第三方应用程序正确地将斜杠转义到 %2f 但找不到路由...你的意思是我不能有一个接受斜杠转义参数的路由?
    • 嗯,试试这个:get 'request_work_sheet/:item_code/:document_type/:workstation' => 'work_sheets#request_work_sheet', constraints: {item_code: /\w{1,2}\/\d{1,3}/}
    【解决方案2】:

    我遇到了这个问题,发现我必须在我的 apache2.conf 文件中设置“AllowEncodedSlashes On”设置。在我这样做之前,apache 会阻止 URL 并返回 404(未找到)。它从来没有到达我的铁路路线。现在一切都按预期通过了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多