Foros del Web » Administración de Sistemas » Apache »

[SOLUCIONADO] .htaccess - Redireccionar moviles a subdomino conservando TODA la URL

Estas en el tema de .htaccess - Redireccionar moviles a subdomino conservando TODA la URL en el foro de Apache en Foros del Web. Buen día queridos foristas, Me dirijo una vez más a Uds. con la esperanza de encontrar una solución final a este problema antes de leerme ...
  #1 (permalink)  
Antiguo 09/06/2017, 12:36
 
Fecha de Ingreso: septiembre-2006
Ubicación: Montevideo
Mensajes: 46
Antigüedad: 11 años
Puntos: 1
.htaccess - Redireccionar moviles a subdomino conservando TODA la URL

Buen día queridos foristas,

Me dirijo una vez más a Uds. con la esperanza de encontrar una solución final a este problema antes de leerme todo el manual del mod_rewrite.

Les cuento que el problema que tengo es el siguiente, terminé de hacer una versión móvil de mi sitio y por ende deseo que siempre que un dispositivo móvil acceda a mi web, este sea redirigido a la versión móvil de la web.

Esto lo he logrado siempre y cuando el usuario acceda al dominio.

Ejemplifico:

Si el usuario escribe en su barra de direcciones del dispositivo móvil:

www.miweb.com ó simplemente miweb.com las instrucciones del .htaccess lo redireccionan correctamente a m.miweb.com

Ahora bien, si el usuario escribe miweb.com/asdfghasdf ó miweb.com/productos.php?idProd=234

No he logrado que .htaccess redireccione a
m.miweb.com/asdfghasdf
ó a m.miweb.com/productos.php?idProd=234

¿Como lo logró? Obviamente algo que ver con las variables QUERY_STRING y REQUEST_URI, pero no logro el comportamiento deseado.

A continuación mi .htaccess:

Cita:
##REWRITE DEFAULTS
RewriteEngine On
RewriteBase /

##MOBILE REDIRECTION
RewriteCond %{HTTP_HOST} !^m.miweb.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
RewriteCond %{HTTP_USER_AGENT} ^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a\ wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar (ch|go)|as(te|us)|attw|au(di|\-m|r\ |s\ )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|b umb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1\ u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(\ i|ip)|hs\-c|ht(c(\-|\ |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(\ |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a |jbro|jemu|jigs|kddi|keji|kgt(\ |\/)|klon|kpt\ |kwc\-|kyo(c|k)|le(no|xi)|lg(\ g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|d o|t(\-|\ |o|v)|zz)|mt(50|p1|v\ )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran |owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v\ )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(4 0|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98 )|w3c(\-|\ )|webc|whit|wi(g\ |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-) [NC]
RewriteRule ^(.*)$ http://m.miweb.com/$1 [L,R=302]
Desde ya muchas gracias a todos.

Última edición por chelix; 12/06/2017 a las 06:35
  #2 (permalink)  
Antiguo 12/06/2017, 10:15
 
Fecha de Ingreso: septiembre-2006
Ubicación: Montevideo
Mensajes: 46
Antigüedad: 11 años
Puntos: 1
Respuesta: .htaccess - Redireccionar moviles a subdomino conservando TODA la URL

Solucione el problema.
Posteo mi solución final para que otros la usen también.

Quería además de lo explicitado en el msg anterior que el usuario pudiera pasar de la versión móvil a la clásica. Eso complico bastante las cosas por un tema de redireccionamiento infinito que lleva al error. Así que creo una cookie para evitar eso.

Cita:
##REWRITE DEFAULTS
RewriteEngine On
RewriteBase /

##MOBILE REDIRECTION
#Se comprueba si se está utilizando el parámetro m para no redirigir a la versión móvil
RewriteCond %{QUERY_STRING} (^|&)m=0(&|$)
#Si es así se crea la cookie
RewriteRule ^ - [CO=mredir:0:www.miweb.com]

#Varias comprobaciones de navegador utilizado
RewriteCond %{HTTP_USER_AGENT} android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iem obile|ip(hone|od)|iris|kindle|lge\ |maemo|meego.+mobile|midp|mmp|netfront|opera\ m(ob|in)i|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\. (browser|link)|vodafone|wap|windows\ (ce|phone)|xda|xiino [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a\ wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar (ch|go)|as(te|us)|attw|au(di|\-m|r\ |s\ )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|b umb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1\ u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(\ i|ip)|hs\-c|ht(c(\-|\ |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(\ |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a |jbro|jemu|jigs|kddi|keji|kgt(\ |\/)|klon|kpt\ |kwc\-|kyo(c|k)|le(no|xi)|lg(\ g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|d o|t(\-|\ |o|v)|zz)|mt(50|p1|v\ )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran |owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v\ )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(4 0|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98 )|w3c(\-|\ )|webc|whit|wi(g\ |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-) [NC]

#Comprobamos que no estemos ya en la versión móvil
RewriteCond %{HTTP_HOST} !^m\.

#No se puede leer y escribir una cookie en la misma petición, hay que duplicar la condición
RewriteCond %{QUERY_STRING} !(^|&)m=0(&|$)

#Se comprueba que no se haya configurado antes la cookie
RewriteCond %{HTTP_COOKIE} !^.*mredir=0.*$ [NC]

#La siguiente linea me permite crear una función de anulación - así un navegador móvil sera capaz de ver el sitio desktop.
#Solo agregar un boton-link al frente del sitio movil con un link similar a http://miweb.com?no_mobile y apache no redireccionara a estos usuarios móviles.
RewriteCond %{THE_REQUEST} !no_mobile [NC]

#Redirigimos a la versión móvil
RewriteRule ^ http://m.miweb.com%{REQUEST_URI} [R=302,L]



La zona horaria es GMT -6. Ahora son las 15:07.