如果参数包含 %2f,则参数不匹配的 Mojolicious 路由

Mojolicious route with a parameter not matching if the parameter contains %2f

我有以下路线

  $r->get('/select_folder/:mail')->to('mail#change_folder');

它几乎每次都运行良好,但当路由包含 %2f 字符序列时,相当于 / 它的工作方式就好像 %2f 是路径分隔符而不是转义序列。

这是一个示例输入:

http://127.0.0.1:5000/select_folder/%5bGmail%5d%2fDestacados

这是错误的一部分:

None of these routes could generate a response for your GET request for /select_folder/[Gmail]/Destacados, maybe you need to add a new one?

我想知道如何在不使用 GET 或 POST 参数的情况下将这样的参数作为 url 部分获取。

我终于发现了如何使用正则表达式来解决问题。

$r->get('/select_folder/:folder'=>[folder=>qr/.*/])->to('mail#change_folder');

我让 :folder 匹配任何字符,现在可以了。

您可以使用 wildcard placeholders 来允许 / 成为匹配参数的一部分。

  $r->get('/select_folder/*mail')->to('mail#change_folder');

%2F 被解释为 / 的原因是因为 URL 在应用于路由之前被解码。