ThinkPHP5 路由别名定义无效,route.php 文件定义如下:
return [ 'admin' => 'admin/Index/index', 'admin/login' => 'admin/Login/index', 'admin/logout' => 'admin/Login/logout', '__alias__' => [ 'admin/activity' => 'admin/Activity', ], ];
模板中 url 生成代码:
{:url('admin/Activity/index')}
生成的 url:
http://localhost/admin/activity/index
按照官方手册提示,使用路由别名后,可以批量定义一系列的路由规则,此时访问 admin 模块的 Activity 控制器的所有操作都可以直接访问,比如:
http://localhost/admin/activity/index => admin/Activity/index http://localhost/admin/activity/add => admin/Activity/add
然而事实上在我的代码中路由别名定义并未生效,访问 http://localhost/admin/activity/index 指向的是默认的 admin/Index/index,仔细查看了一下 tp5 的官方手册找到了 ThinkPHP5 路由别名无效的原因。
在 ThinkPHP5 中路由默认规则匹配检测的时候只是对 URL 从头开始匹配,只要 URL 地址包含了定义的路由规则就会匹配成功,如果希望完全匹配,可以在路由表达式最后使用$符号。
而在我的路由配置文件中,先定义了 'admin' => 'admin/Index/index',规则,而这个规则只要 URL 地址并不是完全匹配,所以只要 URL 地址包含了定义的路由规则就会匹配成功,因此访问 http://localhost/admin/activity/index 指向的是默认的 admin/Index/index。
修改一下路由匹配规则,加上完全匹配设置即可,规则如下:
return [ 'admin/$' => 'admin/Index/index',//加上/$即可 'admin/login' => 'admin/Login/index', 'admin/logout' => 'admin/Login/logout', '__alias__' => [ 'admin/activity' => 'admin/Activity', ], ];
声明:1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。







