网上有非常多的解决方法,其中阿里云官方的方法是增加Vary:User-Agent来让CDN进行区分缓存:
可以通过设置Vary头来区分移动和pc端自适应。
cdn可以根据vary头信息来判定是否缓存相同的url带有不同的头信息的请求。
所以可以在源站返回的请求头上加上Vary:User-Agent这个字段,cdn就会对携带不同User-Agent做不同的缓存的。达到User-Agent这个头信息能到达源站。
nginx可以在server里面加上
add_headerVary''Accept-Encoding,User-Agent'';
实现增加Vary:User-Agent这个字段的效果。
所以,我们围绕这个进行设置:
1.Apache环境网站配置Vary:User-Agent
将以下代码根据实际情况加入对应网站根目录的.htaccess文件中,或者加入Apache的主配置文件httpd.conf:
HeaderappendVaryUser-Agent
2.Nginx环境网站配置Vary:User-Agent
将以下代码添加到对应站点的配置文件中:
add_headerVary"User-Agent";
3.PHP站点配置Vary:User-Agent
将以下代码添加到你PHP网站的合适位置,很好是属于公共文件,例如数据库配置文件中:
4.WordPress站点配置Vary:User-Agent
将以下代码添加到当前WordPress主题的functions.php文件中:
//WordPress配置Vary:User-Agent
add_filter('wp_headers','add_vary_header');
functionadd_vary_header($headers){
$headers['Vary']='User-Agent';
return$headers;
}
其他PHP程序也可以参照这样设置。
我们以PHP程序为例(这是永易搜CMS中的判定手机电脑的代码):
functionis_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')){
returntrue;
}
if(isset($_SERVER['HTTP_X_WAP_PROFILE'])){
returntrue;
}
$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']))){
returntrue;
}
}
//协议法,因为有可能不正确,放到很后判定
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'))) {
returntrue;
}
}
//假如via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if(isset($_SERVER['HTTP_VIA'])){
returnstristr($_SERVER['HTTP_VIA'],'wap')?true:false;
}
returnfalse;
}
切记,网上有关于HTTP_VIA放在很前边进行判定的程序,实际上是不行的,后来永易搜CMS进行了改良,给VIA放到很后判定,才可以实现。
文章地址:https://www.tianxianmao.com/article/online/9759.html