Mojolicious API路由URL参数中点后内容被截断原因查询
问题原因
这是 Mojolicious 框架路由占位符的默认匹配规则导致的:
- 以
:开头定义的标准占位符(比如你代码中的:filename),默认匹配规则为[^/.]+,不会匹配路径分隔符/和点.,所以匹配到foo123456后的第一个.时就会终止匹配,最终拿到的参数只有点前面的内容。
解决方法
根据你的使用场景替换占位符类型即可:
- 如果你的文件名只包含点、不包含路径分隔符
/,使用宽松占位符(以#开头),它允许匹配点,不会截断内容:
my $route = $r->any('/api')->to('API#'); $route->get('/get_data/#filename')->to('#submit_forms');
- 如果你需要匹配的参数包含多级路径(比如
dir1/dir2/filename.bz2),可以使用通配符占位符(以*开头),它可以匹配包括/在内的所有字符:
$route->get('/get_data/*filename')->to('#submit_forms');
内容的提问来源于stack exchange,提问作者brainoverflow
相关产品推荐
相关产品推荐

