Php 重定向、屏幕分辨率还是用户代理更好?

Php 重定向、屏幕分辨率还是用户代理更好?,php,javascript,android,html,Php,Javascript,Android,Html,我已经为一个网站创建了一个移动网页,但我想知道重定向的最佳方法是什么。我是否根据屏幕分辨率或用户代理重定向它们 我假设屏幕分辨率如下所示: if (screen.width <= 1024) window.location.replace("http://www.site/mobile/") else window.location.replace("http://www.site/"); $useragent=$_SERVER['HTTP_USER_AGENT']; if(preg_m

我已经为一个网站创建了一个移动网页,但我想知道重定向的最佳方法是什么。我是否根据屏幕分辨率或用户代理重定向它们

我假设屏幕分辨率如下所示:

if (screen.width <= 1024) window.location.replace("http://www.site/mobile/")
else window.location.replace("http://www.site/");
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/android/i',substr($useragent,0,4)))
header('Location: http://www,site/mobile/');
一种方法比另一种更可取吗?如果是这样,有什么好处?

用户代理

在这个视网膜显示的时代,Android设备可以是你能想到的任何屏幕分辨率,屏幕分辨率和平台之间的相关性越来越小。事实上,有许多移动设备(nexus 7、nexus 10、ipad 3+)的屏幕分辨率与台式电脑相同或更高。分辨率根本不够描述性


另一方面,用户代理的设计目的是告诉您请求的内容。毫无疑问,你会知道它是安卓或iOS设备。此外,在Android上,我认为平板电脑不应该在Android-y用户代理中包含字符串“mobile”,以便更好地定位。类似地,iPad和iPhone都有自己的用户代理字符串集,你可以对它们进行解释。

你需要想想为什么要创建一个移动站点。它是否增加了功能(触摸)或消除了超重(3G)简化了较小屏幕上的导航?如果您是为触摸设备制作的,请检测触摸的可用性。如果您将其构建为允许轻松访问小屏幕,那么屏幕分辨率可能是一个选择(我的带有1200x720的SGS3将看到完整的屏幕,这对我来说没问题)。通过用户代理切换而不考虑太多是一个坏主意(如果UA中的“移动”切换是好主意,但并非所有人都支持)。如果用户代理包含ios,您会去小屏幕优化站点吗?现在你不会了,但你可以在几年前,在iPad问世之前就这么做了。使用触摸功能的windows mini pc,您会怎么做?考虑功能,而不是设备,除非您想在每个新设备上更新所有站点。世界上没有“移动”这样的东西,有那么多不同尺寸和功能的设备,你还无法想象的新设备正在问世

写下你的移动站点的要求(触摸?)以及它给普通站点增加了什么(更好地处理小屏幕?),并测试这些要求。让他们选择

请记住,如果您有一个未安装的数据计划或wifi和一个大屏幕设备,您会发现移动站点的完整站点版本已被破坏,这简直令人讨厌,而允许触摸导航和增强功能的站点,以及在任何屏幕大小上都能很好地扩展的站点是一种导航乐趣

无论如何,我可以建议,当/如果你重定向时,尝试转到另一个站点的同一页面,而不是主页。所以如果你在

index.php?language=en&page=about__us
尝试重定向到

mobile?language=en&page=about__us

为了更好的用户体验。不要假设访问者从主页访问您的站点。

记住平板电脑。它们有大屏幕,但通常只有在安卓或ios设备上才有小页面。你是想重定向所有移动用户还是只重定向安卓?更好的方法是对移动设备进行功能检测,然后根据检测结果进行重定向……这将是Javascript,而不是PHP。您可以添加一个弹出窗口,上面写着“您想查看此页面的移动版本吗?”这样,当用户看到一个全新的视图时,不会感到沮丧。@Vee,但不是弹出窗口。。。请不要弹出窗口!;)使用一个按钮,用户可以在两个版本之间进行选择,或者只使用一个适合这两个版本的站点。许多“移动”网站比它们所取代的“完整”网站更难使用,功能也更差。“你会毫无疑问地知道”吗?伊恩想补充一些有建设性的东西吗?你是说有iphone/android用户代理的台式机,还是反过来?显然,我忽略了这样一个事实,即你可以欺骗你的用户代理,在某种程度上,你依赖于安卓制造商来避免破坏用户代理。我完全支持用户代理检测-我觉得如果用户真的不想被视为他们正在使用的用户代理,他们可能会因为应用程序基于此执行某些操作而受到影响。我的意思是你不能毫无疑问地知道。欺骗是一个问题,并且无法保证请求页面的内容