我已从Codeigniter版本2.x升级到3.x,并注意到URI路由在传递多个段时的行为方式不同。
在2.x版本中,我能够传递以下网址变体:
domain.com/function/arg1
domain.com/function/arg1/arg2
domain.com/function/arg1/arg2/arg3
$ route [' function /(:any)'] =' function / $ 1' 适用于所有三种网址变体我的函数调用是函数($ arg1,$ arg2 = 0,$ arg3 = 0),它允许arg2和arg3是可选的,并在路由规则中以$ 1的形式传入。
为了在版本3.x中工作,我发现我必须将路由设置为:
$ route [' function /(:any)'] =' function / $ 1&#39 ;;
$ route [' function /(:any)/(:any)'] =' function / $ 1 / $ 2&#39 ;;
$ route [' function /(:any)/(:any)/(:any)'] =' function / $ 1 / $ 2 / $ 3';
有什么方法可以简化路由,以便它可以传递所有剩余的段,而不必为可能的段数的每个变化创建单独的路由规则?
答案 0 :(得分:2)
(:any)
不应与/
字符匹配,此错误已在版本3中修复。
您应该仔细阅读the v3.0 upgrade guide ...
肯定有许多开发人员将此漏洞用作实际功能。如果您是其中之一且想要匹配正斜杠,请使用
.+
正则表达式:
(.+) // matches ANYTHING
(:any) // matches any character, except for '/'