thinkphp imdex.php,关于thinkphp的U函数index.php显示与隐藏剖析

用thinkphp写的项目多了,有时候会发现U函数有时候输出的url有些情况含有index.php,有些情况没有。

今天就来好好探究一番U函数。

先看一下跟U相关的配置。

'URL_MODEL' => 1,

// 0 (普通模式);

//1 (PATHINFO 模式);

//2 (REWRITE 模式);

//3 (兼容模式)

//默认为PATHINFO 模式

我们做一个测试,将这四种模式生成的URL放在一起对比。

// 0 (普通模式);

/index.php?m=Admin&c=Login&a=test

//1 (PATHINFO 模式);

/index.php/Admin/Login/test.html

//2 (REWRITE 模式);

/Admin/Login/test.html

//3 (兼容模式)

/index.php?s=/Admin/Login/test.html

这样列出来一起对比,我们就很明显的看出U函数能生成什么的url路径和各种的特点。其中只有重写模式隐藏了index.php。对于U函数要么要明确一点,它只是生成URL字符串的一个工具。

对于具体项目而言应该怎么选择U函数的模式呢?

普通模式

属于通用模式,任何情况下系统都会正确识别这种url。

pathinfo模式

系统默认的模式,作为默认模式当然是一种常用的模式了,pathinfo形式的url很工整,而且系统可以直接通过$_SERVER['PATH_INFO']来获取参数。对于pathinfo它是php的一个功能,既不属于apache等服务器应用,也不是thinkphp独有,它是cgi模式中的传递参数的一种方式。这种路径看起来会优雅很多,早期这么处理也是为了让url对于搜索引擎更友好。

重写模式

如果你项目选择这个,那么你要在web服务器配置定义重写规则。从上面的生成url可观察这种模式隐藏了入口文件‘index.php’,当然你的入口文件也可以是其他的文件名称,以隐藏index.php,在apache为例的,重写规则.htaccess定义如下:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

在使用这个模式请务必将.htaccess这个文件放在项目的根目录中,唯有这样系统才能识别U函数生成的这种url。

兼容模式

这个是解决特殊环境中不支持pathinfo而提供的一种模式。这种方式挺有意思,让我们一起分析分析。从生成的url观察它其实是普通模式+pathinfo模式的一种合体。如果环境支持pathinfo那么我们获取参数的方式直接通过$_SERVER['PATH_INFO']进行处理。当系统不支持这个变量时,我们怎能既能正确的获得url中的参数,参数又能像pathinfo那样显示的那么优雅呢?那么兼容模式就提供了这样子的一种方式,通过get方式来获取pathinfo参数。再加上如下的重写规则,那么这个url就和重写模式的url一样完美了。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]

需要注意的是重写中“^(.*)$ index.php?s=/$1”的“s”变量要和config中“VAR_PATHINFO”变量保持一致。

在这种模式中既然你启用了重写规则,那么直接把模式切换到重写模式。这样U函数生成的路径才会把index.php给隐藏掉。表面上改变了模式,但实际系统处理参数的方式是兼容模式。

从上面可以看出这四种兼容模式不是完全独立的。重写模式可以处理pathinfo模式和兼容模式的路径,兼容模式是普通模式和pathinfo的合体。这四种模式只是他们要解决问题的侧重点不同,一种是表现形式,一种是参数获取。抛开表现形式只看参数获取,url作为php参数获取的形式,get和$_SERVER['PATH_INFO']是从url提取参数的重要手段,从提取的参数中我们区分module,controller,method等重要的参数。至于表现形式,只是为了让url看起来更优雅,不仅对我们还有搜索引擎。

好了,回归到题目中我们把thinkphp U函数index.php显示与隐藏的问题做为切入点,对U函数控制下的四种生成url模式进行剖析,希望对如何更好的在项目中使用U函数有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值