【问题标题】:How to redirect mobile site users to a mobile layout如何将移动网站用户重定向到移动布局
【发布时间】:2014-07-29 21:03:06
【问题描述】:

我找不到关于我具体寻找什么的可靠信息,也不知道执行此操作的最佳方法(在代码中或使用 HTACCESS);将移动用户重定向到http://m.example.com

我希望让移动设备和 PC 用户都能在这两种设备上查看我们的网站,并采用用户友好的布局来适应这两种用户。

【问题讨论】:

  • 常见的做法是用JS检查浏览器,然后重定向。您可以通过链接允许重定向覆盖并将其存储在会话中,或者只提供一次重定向。
  • 最好的方法通常是使用所谓的Responsive design 并围绕使用@media 来识别特定平台的样式的想法。如果您可以在当前想法上使用它,那将是首选,因为它可以避免您创建站点的两个副本。如果您坚持重定向,我建议您使用Mobile Detect
  • 您是否尝试过我的解决方案([1] 通过 .htaccess 和 [2] 通过 PHP Sessions)?

标签: php .htaccess


【解决方案1】:

没有HTACCESS的解决方案:

最好的方法是在 Cookie 中存储有关选择哪种布局的信息。

if(isset($_GET["setMobile"])) {
  setcookie("m", $_GET["setMobile"], time()+(60*60*24*31), "/");
}

然后

if($_COOKIE["m"]) {
  /* MOBILE LAYOUT */
}

我想你甚至不需要 htaccess。您可以在您的子文件夹m.domain.com 中创建index.php 并将Cookie 定义放在那里。

setcookie("m", true, time()+(60*60*24*31), "/");

【讨论】:

  • 我想你可能错过了这个问题,问题是关于如何检测移动用户并重定向他们。
  • 我忘了解决如何在PHP和设置Cookie之后检查Desktop。
【解决方案2】:

解决方案:A:将移动用户重定向到移动布局

通过 .htaccess

RewriteEngine On
RewriteCond %{QUERY_STRING} !^desktop
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|iphone|ipod|#opera mobile|palmos|webos" [NC]
RewriteRule ^$ http://m.example.com [L,R=302]

======================

解决方案:B:将移动网站用户重定向到移动布局,从移动到桌面

通过 PHP 会话

<a href="<?php echo $_SERVER['PHP_SELF'], '?desktop=1' ?>">Go to Desktop version</a>

<?php
if(!isset($_SESSION['desktop'])) {
    $_SESSION['desktop'] = false;
}

if(isset($_GET['desktop']) && $_GET['desktop'] == 1) {
    $_SESSION['desktop'] = true;
}

if(!$_SESSION['desktop']) {
    if ( !$detect->isMobile() ) {
      header('Location: http://m.example.com/');
    }
}
?>

在您的移动网站上,您可以传递 desktop=1 的 get 参数。通常情况下,如果没有传递参数,并且没有设置会话,则为 false。在 $_SESSION['desktop'] 的错误值上,您继续您的脚本,以便它重定向到移动设备。但是一旦传递了参数,它会将会话更改为true,并且您的阻止将不会被执行,因此该站点的正常(桌面)内容将可见。

【讨论】:

  • 让我们假装您是移动查看器并且您想查看桌面版。是否有机会获得该页面?
  • m.example.com的页脚,你可以把链接Go to Desktop Version重定向到example.com。这就是我通常所做的。
  • 但是请记住,如果您输入 example.com,htaccess 会再次将您重定向到 m.example.com。
  • @M1K1O 我已经添加了Solution B 来实现这一点。
  • 和我的方案差不多,但是为什么要把变量存到seesion呢?如果我第二天来到我之前设置为桌面视图的站点,我必须再次选择。而且,它与服务器端无关,但与用户端无关。所以因为使用Cookies比较好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2013-06-20
相关资源
最近更新 更多