thinkphp支持多伪静态方法解析

发布时间:2020-07-05编辑:脚本学堂
介绍下在thinkphp中支持多个伪静态的配置方法,有需要的朋友参考下。

thinkphp的url伪静态功能。

需求:当你要为自已的站点增加一个网站地图链接的时候,如:
http://www.a.com/index.php/sitemap/index
通过隐藏index.php之后url变成了这样

http://www.a.com/sitemap/index
因为thinkphp支持默认操作,url再简化一点

http://www.a.com/sitemap
加上伪静态

http://www.com/sitemap.html

这时候大家会说,网站地图不是要求xml后序吗?谷歌还好说话,没要求一定要xml后序,真正蛋疼的是百度sitemap,格式规定是

http://[域名]/sitemap.xml
没有后序不行,别的后序还是不行,这点让很多用开源系统建站的站长深恶痛绝。
貌似扯得有点远了,咱回题,刚提到thinkphp支持伪静态,直接把url_html_suffix参数配置成.xml不就完事了吗?没错,这样是可以让网站地图链接正常了,也匹配了百度sitemap的蛋疼要求。
可是一个站点全是xml后序,不觉得有点怪怪的吗?如
http://www.a.com/index/index.xml
这样容易让用户产生手误,也容易让搜索引擎误会(我猜的),这必然不是一个明智的选择。
这时候有人要举手发问了吧,thinkphp3.0不是支持restful模式吗?没错,不过我们没必要用大炮去打蚊子(最近特别喜欢说这话)。
那么thinkphp支持多伪静态配置吗?官方手册没有明确表示支持。

解决方案
看了一下核心中dispatcher.class.php的代码,第104行:
 

复制代码 代码示例:
$_server['path_info'] = preg_replace('/.'.trim(c('url_html_suffix'),'.').'$/i', '', $_server['path_info']);
 

了解到thinkphp伪静态实现的原理是基于正则替换,把url_html_suffix配置的内容通过正则替换为空。
这时候大家应该能想到如何实现多伪静态支持了吧?

'url_html_suffix'=>'(html|xml)',
这样访问以下三个连接其实是相同的一个内容
http://www.a.com/sitemap
http://www.a.com/sitemap.html
http://www.a.com/sitemap.xml
结合thinkphp3.0版本的u函数一起使用,你会发现更多惊喜哦!