tp5/thinkhp5.0+ 路由别名竟然区分大小写的?

正文开始

比如我定义个url: /abc 指向目标url /index/abc/abc Route::alias('abc','index/index/abc'); 通过/abc 是可以访问到目标url的

然而 访问 /Abc 是错误的,难不成要写N个路由? Route::alias('abc','index/index/abc'); Route::alias('Abc','index/index/abc'); Route::alias('aBc','index/index/abc'); Route::alias('abC','index/index/abc'); ... Route::alias('ABC','index/index/abc');

N=2的abc的字符长度次方 3位就是 222 = 8 要配置8行

[tp3.2还有个配置:URL_CASE_INSENSITIVE 可以定义,到了tp5 就阉割掉了]

逼不得已改框架源码: thinkphp/library/think/Route.php 642行

public static function alias($rule = null, $route = '', $option = [])
    {
        if (is_array($rule)) {
            self::$rules['alias'] = array_merge(self::$rules['alias'], $rule);
        } else {
            self::$rules['alias'][$rule] = $option ? [$route, $option] : $route;
        }
    }

改为

public static function alias($rule = null, $route = '', $option = [])
    {
        if (is_array($rule)) {
            self::$rules['alias'] = array_merge(self::$rules['alias'], $rule);
        } else {
            $rule = strtolower($rule);  // 2021/4/23 强制不区分路由大小写
            self::$rules['alias'][$rule] = $option ? [$route, $option] : $route;
        }
    }

849行

$url = str_replace($depr, '|', $url);

下面添加 ~~~ $url = strtolower($url);// 2021/4/23 强制不区分路由大小写 ~~~

正文结束

PHP接口(interface)和抽象类(abstract) php正则过滤掉非中文、英文、数字