为何Symfony路由正则返回500错误?preg_match却正常
Symfony路由正则导致500错误的解决方法
问题根源:Symfony路由注解的
requirements参数中,正则规则不需要包裹PHP正则的分隔符/。你当前写法里的'/[a-z-_]+(?:\.pdf)$/'包含了前后斜杠,这会导致路由匹配失败,进而触发500错误。修正后的路由注解代码:
#[Route('/displayer/{slug}', name: 'app_displayer', requirements: ['slug' => '[a-z-_]+(?:\.pdf)$'])]
原因解释:Symfony处理路由requirements的正则时,会自动处理匹配逻辑,不需要手动添加PHP风格的正则分隔符。当你加上
/后,路由会把这两个斜杠当作正则的一部分去匹配,但请求URL里的slug(比如balade_en_laisse.pdf)并不包含前后斜杠,所以完全匹配失败,引发服务器错误。验证方式:修正后访问
/displayer/balade_en_laisse.pdf即可正常匹配路由,也可以通过Symfony的调试命令查看路由规则:
php bin/console debug:router app_displayer
内容的提问来源于stack exchange,提问作者Sebastien
相关产品推荐
相关产品推荐

