专栏首页小白程序猿PHP自动判断客户端并进行301跳转

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

现在很多老版的网站都会有m站,在我们使用移动端访问时会自动跳转到m站,那么如何判断客户端设备是电脑还是手机或者是平板呢,有的使用的是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问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP path_info,Thinkphp controller not exists index\php

    url如果以/为结尾 比如index.php/admin/,不会自动访问默认控制器、方法index,而是报错

    宣言言言
  • ThinkCMF框架任意内容包含漏洞分析复现

    ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。 ThinkCMF提出灵活的应用机制,框架自身提供基...

    PaperPen
  • 网站被劫持 解决网站反复被跳转的处理方案

    临近2019年底,网站安全事件频发,攻击者加大了对网站的攻击力度,一定是在为过年钱做准备,大捞一把过个好年。就在最近,某客户网站被入侵并被篡改了首页代码,网站从...

    网站安全专家
  • 博客开发-框架安装及网站配置

    在thinkphp5.0以后版本中不再支持压缩包下载,只提供compoer、github、gitee方式进行安装,我们选择compoer方式安装,什么是comp...

    申霖
  • Thinkphp框架自定义404页面

    404页面我们在浏览网页的过程中都遇到过,简单来说就是搜索的东西服务器无法找到,给你返回一个提示信息,但是真正的404意义又是什么呢?请查看文章:404的真正意...

    申霖
  • PHP异常处理函数,Thinkphp调试

    在我们开发过程、已上线的应用中,程序经常会因为异常而崩溃。 比如:数据库执行失败、调用了不存在的类、调用了不存在的函数/方法….

    宣言言言
  • 宿舍报修系统基于易班开发平台版本开源

    0、使用前需要将本目录下的sql文件导入数据库,注意,需支持utf8mb4编码推荐数据库版本mysql5.6

    雨落凋殇
  • 从Vulbhub-djinn靶机学习命令注入和Python input() 漏洞

    靶机描述:Level: Beginner-Intermediate flags: user.txt and root.txt Description: The ...

    用户5878089
  • Thinkphp框架搭建企业官网之前期分析

    Thinkphp是一个国产老牌的php开发框架,最初开始于2006年,在07年的时候更名为Thinkphp,在今年由开源中国主办的“2018 年度最受欢迎中国开...

    申霖
  • thinkphp3.2解决ajax无法刷新表单令牌token

    找到文件ThinkPHP\Library\Think\Controller.class.php

    96php.cn

扫码关注云+社区

领取腾讯云代金券