【问题标题】:PHP redirect to mobile version if user browses to subdomain如果用户浏览到子域,PHP 将重定向到移动版本
【发布时间】:2012-03-08 20:43:09
【问题描述】:

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

我想让用户在访问 m.example.com 时强制使用移动版网站(如果他们之前设置了版本 Cookie)。

有没有办法将 m.example.com 重定向到 www.example.com AND 设置 version=mobile ? 我尝试使用我的 DNS 设置执行此操作,使用从“m”子域到 www.example.com/index.php?version=mobile 的 URL 重定向,这对 URL 有效,但是当页面显示时,即使?version=mobile 在 URL 中,我的 PHP 'Mobile Detect' 没有检测到这个,并且仍然呈现页面的完整版本。

编辑 :: 仅供参考,我在 Linux 服务器上。

【问题讨论】:

  • 另一种在没有 php 或重定向的情况下处理您想要实现的目标的方法是使用 mediaqueri.es
  • @AlexLunix - 你能解释一下吗?谢谢:)
  • 您可能遇到了 cookie 域问题。
  • 来自 www.example.com 的 cookie 集与来自 m.example.com 的 cookie 集不同
  • 获取一个 url 并将某人转发到其他地方,检查他们是否在 m.example.com 并将他们转发到 www.example.com?version=mobile httpd.apache.org/docs/current/mod/mod_rewrite.html

标签: php mobile redirect


【解决方案1】:

这是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>";
}

【讨论】:

  • 我已经有了 Mobile Detect。我想你误读了我的问题?我想将 m.example.com 重定向到 www.example.com 并强制使用移动版本。通常,如果用户从子域重定向,他们很可能会看到正确的版本(因为我的移动检测),但我还是想强制它。在您看来,我将如何使用 htaccess?
  • 你为什么不header("Location: http://m.site.com"); ?你甚至可以setcookie 之前。
  • @Basti - 请重新阅读我的问题。移动版和完整版位于 www.example.com 域。 PHP 根据他们的设备检测要渲染的版本。如果他们在地址栏中输入“m.example.com”,我想强制使用移动版本。
  • 对不起,我来晚了...当我从我的移动设备访问您的网站时,您希望我在地址栏中写 www.site.com 并且地址栏中将自动更改为www.m.site.com?对吗?
  • 我在评论@Crsr,而不是你的问题。
【解决方案2】:

可能为时已晚,但我认为问题可能出在 cookie 上。 cookie 的值在您设置它的那一刻没有改变,它稍后/在脚本的末尾改变。因此,如果您在脚本的开头为 cookie 分配值“mobile”,然后您的脚本会按照它运行,那么它的值可能尚未设置为“mobile”。最好在开始时将 cookie 的值写入变量中,然后使用该变量进行操作,而不是依赖 cookie。所以cookie首先将变量设置为'full'(默认)或来自重定向的NULL,但然后$_GET将变量设置为'mobile'并发送将cookie设置为'mobile'的命令,稍后将设置.然后你的代码的其余部分应该根据变量来操作。

【讨论】:

    【解决方案3】:

    您的每个页面都必须包含移动版和完整版的代码,除非您从数据库或其他方式中提取它们(以 Pretty URLs 为例)。然后,您可以将代码编写为 IF/ELSE 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      相关资源
      最近更新 更多