专注Php网页设计制作小程序开发外贸网站功能定制 - (承接设计制作/小程序手机站功能订制seo优化维护等) :673592626:280934751:865129233

电商资源网

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

时间:2018-07-26所属栏目:后台编程 来源: 网商资源

用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定义如下:

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

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

兼容模式

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

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</IfModule>

需要注意的是重写中“^(.*)$ 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)
0%
分享:
 
QQ在线咨询