让ThinkPHP支持多伪静态后序

时间:2014-02-15所属栏目: PHP/PHP框架 来源: 未知 热度:

需求场景
各人都传闻过伪静态有利于SEO,很天然的想到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函数一路行使,你会发明更多惊喜哦!

标签:thinkphp, thinkphp3.0, URL_HTML_SUFFIX, 伪静态
标签:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)