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



我有以下路线

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

它几乎每次都能很好地工作,但是当路由包含 %2f 字符序列时,相当于/它就像 %2f 是路径分隔符而不是转义序列一样。

这是一个示例输入:

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

这是错误的一部分:

这些路由都无法为您的 GET 请求生成响应/select_folder/[Gmail]/Destacados,也许您需要添加一个新路由?

我想知道某种方法可以在不使用 GET 或 POST 参数的情况下将这样的参数作为 url 部分获取。

可以使用通配符占位符来允许/成为匹配参数的一部分。

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

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

最后,

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

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

我使:文件夹匹配任何字符,现在它正在工作。

最新更新