2012-03-08 115 views
0

场景:我有一个设置了php'Mobile Detect'功能的网站。如果检测到移动设备或版本=移动设备(设置cookie),则会显示(通过php)移动版本的页面。如果没有检测到移动设备,或者如果version = full(设置cookie),则会显示(通过php)该站点的完整版本。这一切都发生在我的域名的example.com上。如果用户浏览到子域名,PHP重定向到移动版本

如果用户访问m .example.com,我希望允许用户强制使用该网站的移动版本(以防他们以前设置了版本Cookie)。

有没有办法将m.example.com重定向到www.example.com AND设置version = mobile? 我试着用我的DNS设置做这个,使用从'm'子域的URL重定向到www.example.com/index.php?version=mobile,它为URL工作,但是当显示页面时,尽管?version = mobile在URL中,我的PHP'Mobile Detect'没有选择这个,并且仍然呈现完整版本的页面。

编辑:: FYI我在Linux服务器上。

+0

我会使用mod_rewrite – 2012-03-08 20:46:03

+0

另一种处理你想要实现的,而不是php或重定向的方式是使用http://mediaqueri.es/ – evasilchenko 2012-03-08 20:46:26

+0

@AlexLunix - 你能解释一下吗?谢谢:) – adamdehaven 2012-03-08 20:48:15

回答

2

这是PHP代码,它是更有效的,如果你使用的htaccess这个

$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone"); 
$android = strpos($_SERVER['HTTP_USER_AGENT'],"Android"); 
$palmpre = strpos($_SERVER['HTTP_USER_AGENT'],"webOS"); 
$berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry"); 
$ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod"); 

if ($iphone || $android || $palmpre || $ipod || $berry == true) 
{ 
    echo "<script>window.location='http://m.site.com'</script>"; 
} 
+0

我已经有一个Mobile Detect。我想你误解了我的问题?我想将m.example.com重定向到www.example.com并强制使用移动版本。通常情况下,如果用户从子域重定向,他们很可能会看到正确的版本(因为我的移动检测),但我想强制它。您认为我会如何使用htaccess? – adamdehaven 2012-03-08 20:50:22

+1

为什么不''header(“Location:http://m.site.com”);'?你甚至可以在'setcookie'之前。 – Basti 2012-03-08 20:50:26

+0

@Basti - 请重新阅读我的问题。移动版本和完整版本位于www.example.com域名上。 PHP根据其设备检测要呈现哪个版本。如果他们在地址栏中键入“m.example.com”,我想强制使用移动版本。 – adamdehaven 2012-03-08 20:52:33

0

也许为时已晚了,但我认为这个问题可能与该Cookie。 cookie的值不会在您设置它的时刻更改,它的更改会在/脚本的en处更改。因此,如果您在脚本的开头为Cookie分配了“移动”值,然后您的脚本根据此值运行,则值可能尚未设置为“移动”。如果您在开始时将Cookie的值写入变量中,然后再使用该变量,而不是依赖Cookie,那会更好。所以cookie首先将变量设置为'full'(默认)或者来自重定向的NULL,然后$ _GET将该变量设置为'mobile'并发送命令以将cookie设置为'mobile',稍后将设置该cookie 。然后你的代码的其余部分应该根据变量行事。

0

除非您从数据库或其他方式(认为漂亮的网址为例),否则您的每个网页都必须包含移动版和完整版的代码。然后,您可以将您的代码编写为IF/ELSE语句。