如:http://www.xxx.com/beijing/
如:http://www.xxx.com/beijing/controller/action
一级目录是城市
二级是控制器
三级是对应控制器的操作
有人知道如何解决吗?
如果一级目录不是城市,即直接为正常路由
http://www.xxx.com/controller/action
我自己写了一个代码,可以解决,但是,好像出问题
//HOME配制文件
return array(
// URL路由规则
'URL_ROUTE_RULES'=> array(
#城市路由
'/([a-z]+)/' => function($city){
$res = M('category')->where(array('type'=>'city','ename'=>$city))->find();
if($res){//如果城市存在,得新定义PATHINFO
//城市信息可以写入cookie
dump($res);
$_SERVER['PATH_INFO'] = str_replace($city, '', $_SERVER['PATH_INFO']);
}
return false;
},
#单品详情页(因为上面的也能匹配,所以这个路由规则失效)
'detail/:id\d$' => 'team/detail',
补充:因为老站的基础上,不想使用二级域名做城市,或是有其它的思路的,给个提示!----------------------------------------------------
第三次补充方案:
貌似官方的办法都会出现问题,下面是我的另一个办法,好像可以实现!
修改入口文件,我的URL模式是3,兼容模式
// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',True);
//目录安全文件不用生成
define('BUILD_DIR_SECURE', false);
// 定义应用目录
define('APP_PATH','./Application/');
//运行目录
define ( 'RUNTIME_PATH', './Runtime/' );
//判断一级目录是否合法并重置PATHINFO
$paths = explode('/',$_GET['s']);
$router = array('Home','Team','Admin','User');
if(!in_array($paths[1],$router)){
$_GET['s'] = str_replace($paths[1],'',$_GET['s']);
$_GET['city'] = $paths[1];
}
// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php'; 最佳答案