野狼SEO团队,纯白帽SEO倡导者!13年专注网站优化服务,支持月付!  [点击查看公司宣传册]
专注纯白帽、整站正规优化
让你排名上升,流量上涨!
网站优化服务电话
0371-56789-390
详细内容
当前位置:首页 > 技术资料 > 服务器技术 > 详情

阿里云cdn做了之后手机站和电脑站无法正常切换的解决方案

发布时间:2019-06-19 来源:本站原创 作者:野狼SEO团队 阅读:582

网上有非常多的解决方法,其中阿里云官方的方法是增加 Vary:User-Agent来让CDN进行区分缓存:


可以通过设置Vary头来区分移动和pc端自适应。

cdn可以根据vary头信息来判断是否缓存相同的url带有不同的头信息的请求。

所以可以在源站返回的请求头上加上Vary:User-Agent这个字段,cdn就会对携带不同User-Agent做不同的缓存的。达到User-Agent这个头信息能到达源站。

nginx可以在server里面加上

add_header Vary ''Accept-Encoding, User-Agent'';

实现增加Vary:User-Agent这个字段的效果。


所以,我们围绕这个进行设置:

第一步:设置服务器,让服务器支持Vary:

1. Apache 环境网站配置 Vary:User-Agent

将以下代码根据实际情况加入对应网站根目录的.htaccess 文件中,或者加入 Apache 的主配置文件 httpd.conf:

Header append Vary User-Agent

2. Nginx 环境网站配置 Vary:User-Agent

将以下代码添加到对应站点的配置文件中:

add_header Vary "User-Agent";

3. PHP 站点配置 Vary:User-Agent

将以下代码添加到你 PHP 网站的合适位置,最好是属于公共文件,例如数据库配置文件中:

<?php header("Vary: User-Agent"); ?>

4. WordPress 站点配置 Vary:User-Agent

将以下代码添加到当前 WordPress 主题的 functions.php 文件中:

// WordPress 配置 Vary:User-Agent
add_filter('wp_headers', 'add_vary_header');
function add_vary_header($headers) {
    $headers['Vary'] = 'User-Agent';
    return $headers;
}

其他PHP程序也可以参照这样设置。

第二步:改造网站程序,让网南站程序能够响应不同的User-Agent

我们以PHP程序为例(这是永易搜CMS中的判断手机电脑的代码):

/**
* 判断用户是否为移动用户,可以判断iphone,Android,Windows Mobile和一般的手机系统
* @return boolean
*/
function is_mobile(){
  //判断手机发送的客户端标志,兼容性有待提高
   if(isset($_SERVER['HTTP_USER_AGENT'])){ 
    $userAgent = $_SERVER['HTTP_USER_AGENT'];
    if (strpos($userAgent,'iPhone')||strpos($userAgent,'iPad')||strpos($userAgent,'iPod')||strpos($userAgent,'iOS')){
      return true;
    }
   if (isset($_SERVER['HTTP_X_WAP_PROFILE'])){
      return true;
   }
   $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','openwave','nexusone','cldc','midp','wap','mobile');
      if (preg_match('/(' . implode('|', $clientkeywords) . ')/i', strtolower($_SERVER['HTTP_USER_AGENT']))){
         return true;
      }
   }
  //协议法,因为有可能不准确,放到最后判断
   if (isset($_SERVER['HTTP_ACCEPT'])) {
     // 如果只支持wml并且不支持html那一定是移动设备
     // 如果支持wml和html但是wml在html之前则是移动设备
     if (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))) {
       return true;
     }
      }

  //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  if(isset($_SERVER['HTTP_VIA'])){
    return stristr($_SERVER['HTTP_VIA'],'wap')?true:false;
  }
    return false;
}

切记,网上有关于HTTP_VIA放在最前边进行判断的程序,实际上是不行的,后来永易搜CMS进行了改良,给VIA放到最后判断,才可以实现。

访客头像访 客116.1***
新评论

还没有人评论,快来抢个沙发!