Joomla中的SEF知识点

Joomla中的SEF知识点

Joomla是目前比较盛行的CMS系统,良好的框架结构使越来越多的开发人员加入进来。使用Joomla有一段时间的人都知道Joomla所生成的站点一般都是基于动态URL的对于搜索引擎来说动态URL的站点并不是就不能搜索到就一定会排在后面而是不太友好,这个不友好也是暂时的目前的个别现象,事物都是进步的GOOGLE也会在不断进步,其实我并不喜欢那些把搜索引擎吹呼的不得了的人,这个优化大师那个优化姥姥的,那些人八成都是有一点点个人的私欲在里面,要是不小心刺激到你,抱歉我不是有意在说你!

Joomla中的SEF说白了就是一个对URL的重写的过程将原来参数众多,层次很深的URL改写为一个简单的更容易被记住被搜索的URL。通过分析Joomla站点的URL结果就会发现规律很明显:

域名+index.php?option=com_content&task=category&sectionid=4&id=13&Itemid=27

以上就是一个最普通不过的URL,其中包含的元素有option(组件参数,告诉系统一下内容来自哪个组件)、task(任务参数,组件内执行什么任务上面的例子中代表执行分类列表,sectionid内容的单元号JOOMLA特有,id,itemid项目号)。Joomla本身就自带一个URL优化的组件,也就是一个函数实现对上述地址的重写为index.php/content/view/4/13/27.html,是不是貌似静态,严格来说应该是伪装的静态。

下面的函数sefRelToAbs就是实现上述改写的

Joomla中的SEF知识点/**
Joomla中的SEF知识点*ConvertsanabsoluteURLtoSEFformat
Joomla中的SEF知识点*@paramstringTheURL
Joomla中的SEF知识点*@returnstring
Joomla中的SEF知识点
*/
Joomla中的SEF知识点functionsefRelToAbs($string){
Joomla中的SEF知识点
global$mosConfig_live_site,$mosConfig_sef,$mosConfig_mbf_content,$mosConfig_multilingual_support;
Joomla中的SEF知识点
global$iso_client_lang;
Joomla中的SEF知识点
Joomla中的SEF知识点
//multilingualcodeurlsupport
Joomla中的SEF知识点if($mosConfig_sef&&($mosConfig_mbf_content||$mosConfig_multilingual_support)&&$string!='index.php'&&!eregi("^(([^:/?#]+):)",$string)&&!strcasecmp(substr($string,0,9),'index.php')&&!eregi('lang=',$string)){
Joomla中的SEF知识点
$string.='&lang='.$iso_client_lang;
Joomla中的SEF知识点}
Joomla中的SEF知识点
Joomla中的SEF知识点
//SEFURLHandling
Joomla中的SEF知识点if($mosConfig_sef&&!eregi("^(([^:/?#]+):)",$string)&&!strcasecmp(substr($string,0,9),'index.php')){
Joomla中的SEF知识点
//Replaceall&with&
Joomla中的SEF知识点$string=str_replace('&','&',$string);
Joomla中的SEF知识点
Joomla中的SEF知识点
//Homeindex.php
Joomla中的SEF知识点if($string=='index.php'){
Joomla中的SEF知识点
$string='';
Joomla中的SEF知识点}
Joomla中的SEF知识点
Joomla中的SEF知识点
//breaklinkintourlcomponentparts
Joomla中的SEF知识点$url=parse_url($string);
Joomla中的SEF知识点
Joomla中的SEF知识点
//checkiflinkcontainedfragmentidentifiers(ex.#foo)
Joomla中的SEF知识点$fragment='';
Joomla中的SEF知识点
if(isset($url['fragment'])){
Joomla中的SEF知识点
//ensurefragmentidentifiersarecompatiblewithHTML4
Joomla中的SEF知识点if(preg_match('@^[A-Za-z][A-Za-z0-9:_.-]*$@',$url['fragment'])){
Joomla中的SEF知识点
$fragment='#'.$url['fragment'];
Joomla中的SEF知识点}
Joomla中的SEF知识点}
Joomla中的SEF知识点
Joomla中的SEF知识点
//checkiflinkcontainedaquerycomponent
Joomla中的SEF知识点if(isset($url['query'])){
Joomla中的SEF知识点
//specialhandlingforjavascript
Joomla中的SEF知识点$url['query']=stripslashes(str_replace('+','%2b',$url['query']));
Joomla中的SEF知识点
//cleanpossiblexssattacks
Joomla中的SEF知识点$url['query']=preg_replace("'%3Cscript[^%3E]*%3E.*?%3C/script%3E'si",'',$url['query']);
Joomla中的SEF知识点
Joomla中的SEF知识点
//breakurlintocomponentparts
Joomla中的SEF知识点parse_str($url['query'],$parts);
Joomla中的SEF知识点
Joomla中的SEF知识点
//specialhandlingforjavascript
Joomla中的SEF知识点foreach($partsas$key=>$value){
Joomla中的SEF知识点
if(strpos($value,'+')!==false){
Joomla中的SEF知识点
$parts[$key]=stripslashes(str_replace('%2b','+',$value));
Joomla中的SEF知识点}
Joomla中的SEF知识点}
Joomla中的SEF知识点
//var_dump($parts);
Joomla中的SEF知识点$sefstring='';
Joomla中的SEF知识点
Joomla中的SEF知识点
//Componentcom_contenturls
Joomla中的SEF知识点if(((isset($parts['option'])&&($parts['option']=='com_content'||$parts['option']=='content')))&&($parts['task']!='new')&&($parts['task']!='edit')){
Joomla中的SEF知识点
//index.php?option=com_content[&task=$task][&sectionid=$sectionid][&id=$id][&Itemid=$Itemid][&limit=$limit][&limitstart=$limitstart][&year=$year][&month=$month][&module=$module]
Joomla中的SEF知识点$sefstring.='content/';
Joomla中的SEF知识点
Joomla中的SEF知识点
//task
Joomla中的SEF知识点if(isset($parts['task'])){
Joomla中的SEF知识点
$sefstring.=$parts['task'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//sectionid
Joomla中的SEF知识点if(isset($parts['sectionid'])){
Joomla中的SEF知识点
$sefstring.=$parts['sectionid'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//id
Joomla中的SEF知识点if(isset($parts['id'])){
Joomla中的SEF知识点
$sefstring.=$parts['id'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//Itemid
Joomla中的SEF知识点if(isset($parts['Itemid'])){
Joomla中的SEF知识点
//onlyaddItemidvalueifitdoesnotcorrespondwiththe'unassigned'Itemidvalue
Joomla中的SEF知识点if($parts['Itemid']!=99999999&&$parts['Itemid']!=0){
Joomla中的SEF知识点
$sefstring.=$parts['Itemid'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点}
Joomla中的SEF知识点
//order
Joomla中的SEF知识点if(isset($parts['order'])){
Joomla中的SEF知识点
$sefstring.='order,'.$parts['order'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//filter
Joomla中的SEF知识点if(isset($parts['filter'])){
Joomla中的SEF知识点
$sefstring.='filter,'.$parts['filter'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//limit
Joomla中的SEF知识点if(isset($parts['limit'])){
Joomla中的SEF知识点
$sefstring.=$parts['limit'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//limitstart
Joomla中的SEF知识点if(isset($parts['limitstart'])){
Joomla中的SEF知识点
$sefstring.=$parts['limitstart'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//year
Joomla中的SEF知识点if(isset($parts['year'])){
Joomla中的SEF知识点
$sefstring.=$parts['year'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//month
Joomla中的SEF知识点if(isset($parts['month'])){
Joomla中的SEF知识点
$sefstring.=$parts['month'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//module
Joomla中的SEF知识点if(isset($parts['module'])){
Joomla中的SEF知识点
$sefstring.=$parts['module'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
//lang
Joomla中的SEF知识点if(isset($parts['lang'])){
Joomla中的SEF知识点
$sefstring.='lang,'.$parts['lang'].'/';
Joomla中的SEF知识点}
Joomla中的SEF知识点
Joomla中的SEF知识点
$string=$sefstring;
Joomla中的SEF知识点
Joomla中的SEF知识点
//allothercomponents
Joomla中的SEF知识点//index.php?option=com_xxxx&...

Joomla中的SEF知识点}elseif(isset($parts['option'])&&(strpos($parts['option'],'com_')