如果参数包含 %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 在应用于路由之前被解码。
我有以下路线
$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 在应用于路由之前被解码。