主要是,我认为您的问题来自破折号字符。让我解释。假设输入的 url 是/test-route-9
. 根据您的要求,匹配的蛞蝓将是test-route-
因为您的正则表达式指出之间的字符或可以匹配a-z
的破折号。-
正则表达式将匹配它可以匹配的所有内容,因此它将“吃掉”破折号字符。通过“吃掉”它,剩下的只是9
不正确的,因为路由在匹配该resource_id
部分之前需要另一个破折号。因此,此 url 不会像您期望的那样匹配。
简单的解决方法是用 a/
而不是破折号分隔组件,或者更改分隔 slug 的字符以将其与 url 组件分隔符区分开来。
通过更改 url 中的分隔符来修复:
prefix: /{slug}/{resource_id}
requirements:
slug: "[a-z\-]+"
resource_id: "\d+"
或者:
prefix: /{slug}_{resource_id}
requirements:
slug: "[a-z\-]+"
resource_id: "\d+"
通过直接更改 slug 的分隔符来修复:
prefix: /{slug}-{resource_id}
requirements:
slug: "[a-z_]+"
resource_id: "\d+"
我很确定问题来自于此。没有测试任何东西,但值得一试,以确保问题出在破折号分隔符上。