不是单入口 全站url 自定义问题讨论?
问题描述:
要求实现全站url 的自定义。
前提:
1、产品不是单入口(index.php,user.php,article.php,cate.php。。。。)
2、要考虑seo
个人想法:
给产品加个单入口,把所有的跳转都跳到一个入口, 然后进行分发。
但是这其中牵涉一个 header 跳转问题, 可能会影响SEO (没验证)
举例: 有 user.php article.php
1、后台确定 user.php 自定义成 www.xx.com/user www.xxx.com/article
2、请求 www.xx.com/user www.xxx.com/article 都rewrite 到index.php ,通过数据库查询然后拼接把 他 header 到 user.php 或者 articel.php (是跳转)
3、以上思路 很大程度上会影响网站权重,把蜘蛛给跳晕了, 大家有什么好的办法吗 ?
描述可能啰嗦了, 总结一句, 就是已经上线的产品, 不是单入口, 如果想实现全站url自定义(是全站自定义) 有什么好的办法...
光DD战士
12 years, 4 months ago
Answers
在索引文件index.php中引入一个控制器派发器Dispatcher,用来统一调度零碎的php文件
下面是一个派发器类,可以根据你们网站实际情况,对executeAction方法进行完善
final class Dispatcher
{
private static $request = array();
private static $params = array();
/**
* 派发
* 以$_REQUEST为参数 传入ssss
*/
public static function dispatch()
{
self::$request = $_GET;
return self::executeAction(self::getController(), self::getAction(), self::getParams());
}
/**
* 获得控制器名称
*/
public static function getController()
{
// if(参数 == 'job') 然后从初始化的jobs调用
return isset(self::$request['job']) && !empty(self::$request['job']) ? self::$request['job'] : 'Index'; //以后改成常量
}
/**
* 获得当前动作
*/
public static function getAction()
{
//控制器中的动作
return isset(self::$request['action']) && !empty(self::$request['action']) ? self::$request['action'] : 'index';
}
/**
* 获得动作参数
*/
public static function getParams()
{
$parmas = array();
$params = self::$request;
if(array_key_exists('job', $params))
unset($params['job']);
if(array_key_exists('action', $params))
unset($params['action']);
return self::$params = $params;
}
/**
* 执行动作
*/
public static function executeAction($controller, $action, $params)
{
//组装调用各个零碎的php文件
//...
}
}
教え子D母
answered 12 years, 4 months ago