前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP自动判断客户端并进行301跳转

PHP自动判断客户端并进行301跳转

作者头像
申霖
发布2019-12-27 17:17:16
2.9K0
发布2019-12-27 17:17:16
举报
文章被收录于专栏:小白程序猿小白程序猿

现在很多老版的网站都会有m站,在我们使用移动端访问时会自动跳转到m站,那么如何判断客户端设备是电脑还是手机或者是平板呢,有的使用的是js判断方式,以前我们使用的方式也是这样的,但是这样是损失资源的,因为js判断是在页面上进行的操作,这样就会有数据的请求。然后,获取完数据,判断设备类型,进行跳转,再次获取数据,渲染页面。浪费了很多资源,也加长了用户的等待时间。

js跳转流程图
js跳转流程图

js跳转流程图

那么,如何去避免这个问题,并且达到同样的效果呢,今天教大家一个方式。我们以thinkphp框架为例,版本为thinkphp5.0,在index.php(thinkphp框架的入口文件)文件内加入如下代码,此方式适用于有入口文件的框架。

//判断客户端并进行跳转
if(isset($_SERVER['HTTP_USER_AGENT'])) {
	$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);

	$clientkeywords = array('nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-','philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu','android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini','operamobi', 'opera mobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile');
	if(preg_match("/(".implode('|',$clientkeywords).")/i",$userAgent)&&strpos($userAgent,'ipad') === false)
	{
		//手机站
		$url = $_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
		$http = $_SERVER['HTTP_HOST'];

		if(substr($http, 0,3) == 'www'){
			$newurl = str_replace('www.', 'm.', $url);
			header('HTTP/1.1 301 Moved Permanently');
			header("location:$newurl");
		}
	}else{
		//PC站
		$url = $_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
		$http = $_SERVER['HTTP_HOST'];

		if(substr($http, 0,1) == 'm'){
			$newurl = str_replace('m.', 'www.', $url);
			header('HTTP/1.1 301 Moved Permanently');
			header("location:$newurl");
		}
	}
}else{
	echo "无法获取客户端标识";
}

此代码在项目入口文件处进行判断,避免不必要的数据请求,并实现了www站和m站之间的相互转换,使用301重新向方式跳转,更好的避免了seo问题。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档