如果参数包含%2f

时间:2019-06-14 08:19:00

标签: perl routes mojolicious

我有以下路线

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

几乎每次都可以正常工作,但是当路由包含%2f个字符序列时,等效于/,就好像%2f是路径分隔符而不是转义序列一样。

这是示例输入:

  

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

这是错误的一部分:

  

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

我想知道一些不使用GET或POST参数就可以将这样的参数作为url部分的方法。

2 个答案:

答案 0 :(得分:3)

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

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

将%2F解释为/的原因是因为在将URL应用于路由之前已对其进行解码。

答案 1 :(得分:1)

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

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

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