开启 手机版二级域名m.xxxx.com 方法

前言:周末有时间看了下最新的2.2的程序;把以前的代码重新规范化整理了下;
修改前 先把二级域名解析到相应的站点上;在m_host函数内 把二级域名手动添加上,不添加则视为不启用二级域名和移动端的绑定

(1)functions.inc.php 下新增函数
1.base_parse_url;m_host;pre_rewite;moblie_sikp
2.get_request_route下新增判断语句
3.is_mobile上新增函数 moblie_sikp
4.is_mobile 内新增判断语句
5. 移动端伪静态事例
/m/question/(:any)===/mq/(:any)
/m/topic/(:any)===/mt/(:any)
/m/question/(:any)===/mq/(:any)
/m/people/(:any)===/mp/(:any)
(2) 修改 CORE/URI.PHP 函数 set_rewrite
#=======================内容如下=====================
1.functions.inc.php 下新增函数
/**
* 解析主域信息
*@author:yutou 1004113364@qq.com
* @return array
*/
function base_parse_url()
{
$clean_url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : NULL;
$clean_url = dirname(substr($_SERVER['PHP_SELF'], 0, strlen($_SERVER['PHP_SELF']) - strlen($clean_url)));
$clean_url = rtrim($_SERVER['HTTP_HOST'] . $clean_url, '/\\');
if ((isset($_SERVER['HTTPS']) AND !in_array(strtolower($_SERVER['HTTPS']), array('off', 'no', 'false', 'disabled'))) OR $_SERVER['SERVER_PORT'] == 443)
{
$scheme = 'https://';
}
else
{
$scheme = 'http://';
}

$server_exp = explode('.',$_SERVER['HTTP_HOST']);
$server_sld = $server_exp[0];
$server_domain = implode('.',array_slice($server_exp,1));
//获取URL链接第一位是不是M,
$request = explode('/', $_SERVER["REQUEST_URI"]);
// var_dump($request);
if($request[1] == '?' and $request[2] == 'm'){
$request[1] = 'm';
}
return array('scheme' =>$scheme,'sld'=>$server_sld,'domain'=>'.'.$server_domain,'request_one'=>$request[1]);
}
/**
*@author:yutou 1004113364@qq.com
*移动端域名
* return boolean
* return string
**/
function m_host()
{

$m = '';//添加二级域名如:www.XXX.XXX; 这个地方只需要加WWW 即可
if($m){
return $m;
}
return false;
}
/**
*当域名为PC时 过滤掉 手机的静态规则
*当域名为移动时 过滤掉 PC的静态规则
**/
function pre_rewite($rewite)
{
$rew=array();
if(!is_mobile()){
foreach ($rewite as $key => $val) {
if($val != '/m/===/')
{
$rew =$val;
}
}
}else{
foreach ($rewite as $key => $val) {
if($val != '/explore/===/')
{
$rew =$val;
}
}
}
return $rew;
}

2.get_request_route下新增判断语句
$replace_array = array("(:any)" => "([^\"'&#\?\/]+[&#\?\/]*[^\"'&#\?\/]*)", "(:num)" => "([0-9]+)");
//搜索上面这句,在它下面加上
//新增如下语句
if(m_host())
{
$request_routes = pre_rewite($request_routes);
}
3.新增函数 moblie_sikp
/**
* 新增 二级域名跳转函数
*@author:yutou 1004113364@qq.com
* @return boolean
*/
function moblie_sikp()
{
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
// 新增内容
$parse_url = base_parse_url();
$m_url = $parse_url['scheme'].m_host().$parse_url['domain'];
$request_url = $_SERVER["REQUEST_URI"];
if($parse_url['sld'] == m_host())
{
return true;
}
else if($parse_url['request_one'] == 'm' AND $parse_url['sld'] != m_host())
{

if($request_url == '/?/m/' or $request_url == '/m/')
{
$server_url = $m_url;
}else{
$request_routes = get_request_route();
foreach ($request_routes as $key => $val)
{
$re_val = str_replace('/', '\/', $val[1]);
if (preg_match('/^\/' . $re_val . '(.*)$/', $request_url))
{
$url = preg_replace('/^\/' . str_replace('/', '\/', $val[1]) . '/i', str_replace('\/', '/', $val[0]), $request_url);
$url = '/'.$request_url;
break;
}
}
$server_url = $m_url.$url;
}

header('Location: '.$server_url);
die;
// return true;
}
if (preg_match('/iemobile/i', $user_agent) OR preg_match('/mobile\ssafari/i', $user_agent) OR preg_match('/iphone\sos/i', $user_agent) OR preg_match('/android/i', $user_agent) OR preg_match('/symbian/i', $user_agent) OR preg_match('/series40/i', $user_agent))
{

header('Location: '.$m_url.$request_url);
die;
}
return false;
}
4. 修改函数IS_MOBILE
// 调用函数
if(m_host()){
return moblie_sikp();
}
//搜索下面这句,在它上面加上
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
5. 修改 CORE/URI.PHP 函数 set_rewrite
//yang修复移动端使用 新的二级域名时 URL 强制带 /?/m 问题

if(m_host()){
if(base_parse_url()['sld'] == m_host())
{
if($this->default_vars['app_dir']!='m')
{
$this->default_vars['app_dir'] ='m';
}

}
}
//搜索下面这句 在它上面加上
$__app_dir = $this->default_vars['app_dir']; // 应用目录

打赏

次打赏,累计5元

7 个评论

厉害了,大神,能不能提供一个完整的覆盖文件啊,不是懒是不会,照着做,结果也是不一样
漏了 一句。。。 你看下
请问漏了那一句啊,请问
谢谢分享,有需要的朋友们可以试试,有结果也请反馈分享下。
更改此 函数 这句 get_request_route
有成功的吗?
我不懂这个,所以问问有没有直接打包上传的

要回复文章请先登录注册