需求:
①若访问的是article/index,则删除其中的index;
②若访问的是DEFAULT_MODULE,则URL中不显示;
解决方式:
①修改/ThinkPHP/Common/function.php中的U方法:
//在760左右加以下判断,action为index或者controller为index时,不显示url中的index
if(strtolower($var[C('VAR_ACTION')]) == 'index'){
unset($var[C('VAR_ACTION')]);
if(strtolower($var[C('VAR_CONTROLLER')]) == 'index'){
unset($var[C('VAR_CONTROLLER')]);
}
}
②在以上基础上,777行左右,修改如下,判断当前MODULE_NAME为C('DEFAULT_MODULE')时,直接在URL显示中删除
// $module = defined('BIND_MODULE') ? '' : $module;
if(defined('BIND_MODULE') || strtolower($module)==strtolower(C('DEFAULT_MODULE'))){
$module = '';
}
③修改/ThinkPHP/Library/Think/Dispatcher.class.php中的dispatch方法,在104行左右的if判断改成如下:
if( empty($allowList) || (is_array($allowList) && in_array(ucfirst($module), $allowList))){
$_GET[$varModule] = $module;
$_SERVER['PATH_INFO'] = isset($paths[1])?$paths[1]:'';
}else{ //找不到MODULE则使用C('DEFAULT_MODULE')
$_GET[$varModule] = strtolower(C('DEFAULT_MODULE'));
$_SERVER['PATH_INFO'] = __INFO__;
}
④修改/Application/Common/Conf/config.php,加一个配置'MODULE_ALLOW_LIST' => array('Home','Admin','Install'),
-------------------------------------------------
修改后的文件已传到附件。但是我不主张自己修改开源框架的内核,有问题或建议要及时反馈给开发团队,以框架开发团队为主,大家一起来完善,让更多的PHPer享受到ThinkPHP框架的乐趣。所以TP团队如果愿意将我的这个小小的需求在下一版本中完善,将感激不尽~
-----------------举个栗子,请对比一下原来这个页面的url-----------------
这个是后台,删除了最后面的index,参数也变成了问号方式显示

这个是前台的文章详情页,删除了home和最后面的index的url显示效果

onethink_url_fix.7z
( 14.05 KB 下载:1 次 )
最佳答案