thinkphp的url地址区分大小写?

在默认情况下: 在访问url地址的时候, 其中的 Action类名 即: 模块名称 是区分大小写的. (只有模块名, 即控制器名称)

可以根据设置 'URL_CASE_INSENSITIVE' => true 来解决.

如何实现的?

是在 .../lib/dispatch.class.php中, 有方法: dispatch().
链接: 参考这篇文章 ThinkPHP3.1.3设置url智能识别大小写及其原理

要使用户的输入, 变成: 首字母大写+其他内容小写的方法: ucfirst(strtolower($input_group)).

   // 在dispatch.class.php 文件中, 的  getModule () 函数中:

//.....
         if($maps = C('URL_MODULE_MAP')) {
            if(isset($maps[strtolower($module)])) {
                // 记录当前别名
                define('MODULE_ALIAS',strtolower($module));  // 这里将$module全部小写了.
                // 获取实际的模块名
                return   $maps[MODULE_ALIAS];
            }elseif(array_search(strtolower($module),$maps)){
                // 禁止访问原始模块
                return   '';
            }
        }
        if(C('URL_CASE_INSENSITIVE')) {
            // URL地址不区分大小写
            // 智能识别方式 index.php/user_type/index/ 识别到 UserTypeAction 模块
            $module = ucfirst(parse_name($module,1));     // 这里将首字母大写了
        }
        return strip_tags($module);

thinkphp的URL大小写

ThinkPHP框架的URL是区分大小写(主要是针对模块、控制器和操作名,不包括应用参数)的,这一点非常关键,因为ThinkPHP的命名规范是采用驼峰法(首字母大写)的规则,而URL中的模块和控制器都是对应的文件,因此在Linux环境下面必然存在区分大小写的问题。

框架内置了一个配置参数用于解决URL大小写的问题,如下:

'URL_CASE_INSENSITIVE'  =>  true,  

当URL_CASE_INSENSITIVE设置为true的时候表示URL地址不区分大小写,这个也是框架在部署模式下面的默认设置。

当开启调试模式的情况下,这个参数是false,因此你会发现在调试模式下面URL区分大小写的情况。

==============================================
markdown中的换行?
空一行(两个回车)分段或者写
语句
行末加两个或多个空格才是真正的换行,否则正常的一个回车就像在 HTML 代码中一样,被当作空格处理

======================================

根据项目的不同URL设置,同样的U方法调用可以智能地对应产生不同的URL地址效果,例如针对

U('Blog/read?id=1')这个定义为例。
如果当前URL设置为普通模式的话,最后生成的URL地址是:
http://serverName/index.php?m=Blog&a=read&id=1
如果当前URL设置为PATHINFO模式的话,同样的方法最后生成的URL地址是:
http://serverName/index.php/Blog/read/id/1
如果当前URL设置为REWRITE模式的话,同样的方法最后生成的URL地址是:
http://serverName/Blog/read/id/1
如果当前URL设置为REWRITE模式,并且设置了伪静态后缀为.html的话,同样的方法最后生成的URL地址是:
http://serverName/Blog/read/id/1.html

============================================
thinkphp的url地址区分大小写的问题解决?

[链接: 完全来自tp官网文档 URL大小写]

> 我们知道,系统默认的规范是根据URL里面的moduleName和actionName来定位到具体的模块类,从而执行模块类的操作方法,如果在Linux环境下面,就会发生URL里面使用小写模块名不能找到模块类的情况,例如在Linux环境下面,我们访问下面的URL是正常的:

> http://serverName/index.php/User/add

>但是,如果使用

>    http://serverName/index.php/user/add

> 就会出现user模块不存在的错误。因为,我们定义的模块类是UserAction而不是userAction,但是后者显然不符合ThinkPHP的命名规范,这样的问题会造成用户体验的下降。其实,系统本身已经提供了一个良好的解决方案,可以通过配置简单实现。
只要在项目配置中,增加:

>    'URL_CASE_INSENSITIVE' =>true

> 就可以实现URL访问不再区分大小写了。

>     http://serverName/index.php/User/add
    //将等效于
    http://serverName/index.php/user/add

> 这里需要注意一个地方,如果我们定义了一个UserTypeAction的模块类,那么URL的访问应该是:

    http://serverName/index.php/user_type/list
    //而不是
    http://serverName/index.php/usertype/list

> 利用系统提供的U方法可以为你自动生成相关的URL地址。
> 如果设置

    'URL_CASE_INSENSITIVE' =>false

> 的话,URL就又变成:

    http://serverName/index.php/UserType/list

> 注意:URL不区分大小写并不会改变系统的命名规范,并且只有按照系统的命名规范后才能正确的实现URL不区分大小写。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值