Detectar dispositivos moviles y redireccionar PHP

Actualizado

Si tienes un sitio web y estás pensando en crear un diseño para que se visualize correctamente en dispositovos móviles, probablemente necesitaras redireccionar automáticamente a los navegadores de los dispositivos móviles para que entren directamente a la versión diseñada específicamente para estos, y que los navegadores de las pc’s de escritorio entren a tu sitio normal.

Podemos hacerlo de la siguiente manera, creamos un archivo llamado index.php, el archivo que tenias como index lo puedes renombrar (por ejemplo a escritorio.html con la extensión que tenía).

Bueno pues aquí les traigo este nuevo código reducido y completamente personalizable, coloquenlo en su index, en la cadena de $usuarios_moviles pueden quitar o agregar los que gusten para que sea redireccionado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
< ?php
 
   $es_movil=FALSE; //Aquí se declara la variable falso o verdadero XD
   $usuario = $_SERVER['HTTP_USER_AGENT']; //Con esta leemos la info de su navegador
 
   $usuarios_moviles = "Android, AvantGo, Blackberry, Blazer, Cellphone, Danger, DoCoMo, EPOC, EudoraWeb, Handspring, HTC, Kyocera, LG, MMEF20, MMP, MOT-V, Mot, Motorola, NetFront, Newt, Nokia, Opera Mini, Palm, Palm, PalmOS, PlayStation Portable, ProxiNet, Proxinet, SHARP-TQ-GX10, Samsung, Small, Smartphone, SonyEricsson, SonyEricsson, Symbian, SymbianOS, TS21i-10, UP.Browser, UP.Link, WAP, webOS, Windows CE, hiptop, iPhone, iPod, portalmmm, Elaine/3.0, OPWV"; //En esta cadena podemos quitar o agregar navegadores de dispositivos moviles, te recomiendo que hagas un echo $_SERVER['HTTP_USER_AGENT']; en otra pagina de prueba y veas la info que arroja para que despues agregues el navegador que quieras detectar
 
   $navegador_usuario = explode(',',$usuarios_moviles);
 
   foreach($navegador_usuario AS $navegador){ //Este ciclo es el que se encarga de detectar el navegador y devolver un TRUE si encuentra la cadena
      if(eregi(trim($navegador),$usuario)){
         $es_movil=TRUE;
      }
   }
 
   if($es_movil==TRUE){
      header('Location:http://Aquí va la URL de tu web movil');
   }
   else{
      header('Location:http://Aquí va la URL de tu web normal');
   }
 
?>

Bájate aquí el Archivo original del código

53 Comentarios

  1. Alexis says:

    Hola, el script funciona super, pero tengo una duda.

    Si un usuario entra desde PC, Mac o Linux, como puedo detectar a estos usuarios y redijirilos a la web que corresponde, que no sea movil ?

  2. Anónimo says:

    De Peluches viejo!!!

  3. Miguel Angel Cruz says:

    Uff muchas gracias, acabo de usar tu codigo PHP y lo incruste en mi HTML y todo perfectisimo, hice solo un test de prueba pero es fantastico. Funciona perfecto, gracias!

  4. claudio says:

    Tengo una web flash montada en html, yo entiendo que flash es un dolor de cabeza para verlo en iphon ó ipad, entonces lo que se me viene a la mente es hacer sumar en mi server otra version compatible con estos aparatitos osea ahora tendria una web para compus y otra para moviles, la pregunta es:

    Como hago que cuando el usuario busque mi web desde su movil http://www.midominio.com se redirecione a la version que esta hecha para telefonos??, la idea es que me alumbren el camino tan bien que no pueda perderme, de ante mano muchas gracias por sus respuestas.

    Gracias.

  5. Isyal_2000 says:

    Y tengo el script y redirecciona a la perfeccion el problema es que me redire ciona siempre al index de la veraion movil no al link original como puedo arreglar esto

  6. Christian says:

    hola ya hice lo que dice ahi crear un archivo llamado index y ahora tengo mis 2 carpetas en mi servidor local q uno es el del sitio web para pc y el sitio web para movil y ya los direccione y lo ago desde mi maquina y si funciona correctamente, el problema es cuando intento acceder desde otra maquina en red o desde un dispositivo movil marca error que no fue posible encontrar el servidor, no se si podrian ayudarme y decirme poque podria ser el posible error, gracias

  7. Taiyo says:

    Hey que tal excelente esta informacion pero haora tenog una duda, si quisiera enviar esa
    informacion a una base de datos para realizar una grafica de estos datos por mes,
    llevar una estadisitca del tipo de navegador o dispositivo movil que se usa
    como podria hacer para guardar la informacion de este php en una base de datos mysql?

  8. SF says:

    Aun no lo he probado, pero lo hare y por los comentarios que vi, se que funciona. Muchas gracias por compartir!

    Exitos

  9. Yerko says:

    Viejo, gracias por la información, de mucha ayuda para estudiantes principiantes en esto =)
    Muchas Gracias.

  10. Lucho says:

    Men eres un capo viejo !!! Éxitos !!

  11. Bernal says:

    probando!!

  12. Juan Felipe Alvarez Saldarriaga says:

    Yo cree un mini framework en PHP que tiene una funcionalidad parecida, usando un regex de: http://detectmobilebrowser.com/ para detectar si es un dispositivo movil, aparte de que detecta si es android o blackberry, me falta hacerle al iphone (por si alguien le interesa aportar ;) ), aca les dejo el codigo :) https://github.com/nebiros/yasc/blob/master/library/Yasc/Http/UserAgent.php

  13. ricardo says:

    Muchas gracias, me3 funciono de perlas lo recomiendo, excelente ayuda.

  14. mike lopez says:

    No funciona con las versiones del Explorer, que podria modificarle???

  15. Neftali says:

    $valor){
    if(strpos(trim($strNavegadorUsuario),trim($valor))){ // para versiones de php de la 5.3 en adelante
    //if(eregi(trim($strNavegadorUsuario),$valor)){ // Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.
    $bolMovil = true;
    break;
    }
    }

    if($bolMovil == true){
    //header(‘Location:http://Aquí va la URL de tu web movil’);
    echo(“es movil: “. $strNavegadorUsuario);
    }
    else{
    //header(‘Location:http://Aquí va la URL de tu web normal’);
    echo(“es pc: “. $strNavegadorUsuario);
    }
    ?>

  16. Isaac Banda Anguita says:

    Perfecto, me funcionó a la primera…. es lo que necesitaba, me has quitado varios dolores de cabeza…. saludos

  17. arturo says:

    porque me sale este error??:

    Esta página web tiene un bucle de redireccionamiento
    La página web http://pagodaestudio.com/ ha realizado demasiados redireccionamientos. Para solucionar el problema, elimina las cookies de este sitio o permite las cookies de terceros. Si el problema persiste, es posible que se trate de un error de configuración del servidor y no de un problema relacionado con tu ordenador.
    A continuación se detallan algunas sugerencias:
    Vuelve a cargar esta página más tarde.
    Más información sobre este problema.
    Error 310 (net::ERR_TOO_MANY_REDIRECTS): Demasiados redireccionamientos.

  18. karpeto says:

    Buenos días, verás no soy muy ducho en estos temas, a ver yo tengo un html que llama a un swf en el servidor, con lo que con dreamweaver cs5.5 me he creado una versión de la web para movil, en jquery, y que me la guarda como html5, qué he de hacer con ese código, porque creo un php (index.php), pego el código y a continuación inserto el swf pero al visualizarlo sólo me detecta el código. ¿He de preservar el index.html?
    Gracias de antemano

  19. Vhan says:

    eregi está deprecada y no me funciona.. en su lugar en el ciclo usé:

    foreach($navegador_usuario AS $navegador){
    //Este ciclo es el que se encarga de detectar el navegador y devolver un TRUE si encuentra la cadena
          if(strpos(trim($usuario),trim($navegador))){
             $es_movil=TRUE;
          }
       }
    

    para los que tienen el error de “header information”, vean que esten poniendo esta seccion de codigo al principio de sus .php… no pueden poner ningun tipo de “echo” antes de esto.

  20. Cristian says:

    Perfecto amigo !!!

    Me ha funcionado a la primera, muchas gracias :)

  21. Arturo says:

    Me sirvio de manera espectacular! muchas gracias!

  22. Charly González says:

    Funciona perfectamente, gracias de antemano.

  23. zarith says:

    Alguien lo tien en ASP o en HTML :) gracias por el aporte

    • @jcxsandoval says:

      Hola, encontré algunos códigos que tal vez te puedan servir:

      ASP
      < %
      dim u,b
      set u=Request.ServerVariables("HTTP_USER_AGENT")
      set b=new RegExp
      b.Pattern="android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino"
      b.IgnoreCase=true
      b.Global=true

      if b.test(u) then response.redirect("http://mi_web_movil.com") end if
      %>

      ASP.NET
      < %
      Dim u As String = Request.ServerVariables("HTTP_USER_AGENT")
      Dim b As New Regex("android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino", RegexOptions.IgnoreCase)

      If b.IsMatch(u) Then Response.Redirect("http://mi_web_movil.com")
      %>

  24. Facundo says:

    Muy buen post! claro y sencillo.
    Gracias por la ayuda!

  25. Francis says:

    Hola. no me funciona

    • @jcxsandoval says:

      Hola, podrías darme más información??

      • Francis says:

        Hola
        He puesto en el php tal como dicen y nada
        Estoy usando magento commerce
        Alguien que me oriente.
        salu2

        • @jcxsandoval says:

          Hola, nunca e usado magento, pero normalmente esos sistemas se usan con plantillas o temas que le dan la apariencia deseada al front office de tu aplicación, por lo que el código lo podrías colocar en el header de tu plantilla y con eso debería funcionar, ahora también, puedes usar el .htaccess pero debes tener cuidado por que es probable que magento haya modificado este archivo.
          El código en .htaccess es:
          RewriteEngine On
          RewriteBase /

          RewriteCond %{HTTP_USER_AGENT} android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge\ |maemo|midp|mmp|opera\ m(ob|in)i|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ (ce|phone)|xda|xiino [NC]
          RewriteRule ^$ http://mi_web_movil.com [R,L]

  26. Jony says:

    A mi tambien me sale esta advertencia:

    Warning: Cannot modify header information – headers already sent by (output started at /home/wanda/www/www/index.php:7) in /home/wanda/www/www/index.php on line 46

    sabes aque se debe??
    Gracias por la ayuda.

  27. Gerardo says:

    Hola por que a mi no me funciona y me aparece esto en la web?

    < ?php਀ ##############################################################################################
    ਀⌀⌀䐀攀琀攀挀琀愀爀 洀瘀椀氀攀猀Ⰰ 搀攀猀挀愀爀最愀搀漀 搀攀㨀
    ⌀⌀ ## ##਀ ⌀ 栀琀琀瀀㨀⼀⼀愀氀氀ⴀ樀挀猀⸀挀漀洀⼀瀀爀漀最爀愀洀愀挀椀漀渀⼀瀀栀瀀
    搀攀琀攀挀琀愀爀ⴀ搀椀猀瀀漀猀椀琀椀瘀漀猀ⴀ洀漀瘀椀氀攀猀ⴀ礀ⴀ爀攀搀椀爀攀挀挀椀漀渀愀爀ⴀ瀀栀瀀⸀栀琀洀氀
    ⌀ ## ##਀⌀⌀ऀ䴀漀搀椀昀椀挀愀氀漀 挀漀洀漀 最甀猀琀攀猀
    ℀℀℀
    ⌀⌀
    ##############################################################################################
    

    Lo podre con mis link y con el archivo original y me sucede lo mismo....

    Alguna ayuda?
    Gracias!
    Gerardo

    • @jcxsandoval says:

      mmm parece que no se esta ejecutando bien tu documento, probablemente no lo este leyendo como un documento de php, podrías darme más información

    • Bernal says:

      tienes mal esta parte:

      < ?php

      debe ser sin espacio:

  28. corleone1846 says:

    De lujooooooo… Es exacto lo que buscava, muchas gracias

  29. Jose says:

    a mi no me funciona, me da este resultado cuando creo un index solo para el codigo…

    Warning: Cannot modify header information – headers already sent by (output started at /home/automoto/public_html/index.php:2) in /home/automoto/public_html/index.php on line 36

    el codigo es este:

  30. victt says:

    gracias, habia buscado la solucion.. pero esta es la mas practica y clara que he visto, que sertero, Mil graicas

  31. Anonimo says:

    Super!!!! Gracias Hermano!!! Q buen dato!!!!

  32. jatskaneda says:

    excelente aporte felicitaciones

  33. zabdi says:

    Muchas gracias voy a probarlo =)

  34. santiago says:

    excelente…
    me funcionó correctamente

  35. Edwin says:

    Hola amigo muchas gracias por la ayuda. Sin embargo, estoy tratando de hacer las pruebas desde mi blackberry javelyn (sw v5.0) y sigue direccionandome a la página web normal. Crees que haya que agregar algo mas?

    Gracias. Saludos!

    • @jcs666a says:

      Tienes razon, existen por ahi algunas filtraciones, no te preocupes ya casi tengo lista una nueva version con mucho menos cógigo y que permitirá agregar o quitar dispositivos para que sean redireccionados facilmente

    • @jcs666a says:

      Ya quedo la version 2.0 XD mas compacta y facil de personalizar!!!

      • Edwin says:

        Hola Julio.

        Gracias por esta referencia. Con algunas adaptaciones esta trabajando a la perfección.

        Saludos desde Venezuela

  36. Mr. Soriano says:

    Me funciona a las mil maravillas. Muchas gracias!!

  37. Anonimo says:

    bajando!

    Sam

  38. Anonimo says:

    muchas gracias Hermano…

    sam

Deja tu comentario