Nota: esta solución es más sobre el rendimiento de solución rápida y por fin he terminado
Asumo ya que está utilizando Memcache a presentar el contenido de una base de datos MySQL, y luego analizarlo en PHP y guardar a la caché y mostrarlo.
Cada versión tendría un dominio diferente. iPhone/Android (y otro teléfono inteligente) utilizará el dominio m.domain.com
, las tabletas (iPad, galaxy, etc.) usarán t.domain.com
, todas las demás usarán o.domain.com
y las predeterminadas usarán www.domain.com
o domain.com
.
Todos estos subdominios pueden apuntar a la misma carpeta (/var/www/
- la predeterminada). Lo que hará el truco es cómo lo llamas.
Añadir esta tu .htaccess o configuración de Apache:
SetEnvIf Host ^www\. page=www
SetEnvIf Host ^o\. page=others
SetEnvIf Host ^m\. page=mobile
SetEnvIf Host ^t\. page=tablets
rewriterule ^.*$ index.php?subdomain=%{ENV:page} [QSA,L]
Así que en su archivo PHP que puede utilizar el $_GET['subdomain']
y decidir lo que hay que hacer para generar su página. De esta forma, es muy fácil de mantener, tienes 1 punto de entrada y puedes configurar reglas en PHP para recuperar información sobre lo que necesitas mostrar (el contenido será el mismo, solo cambiará el diseño).
Una cosa que recomiendo será optimizar sus archivos. La versión móvil de su sitio debe ser de alguna manera (CSS, Images, JS). No desea que su usuario cargue grandes CSS, JS e imágenes desde un dispositivo móvil con una red lenta. Desea optimizar tanto como sea posible para un dispositivo de red más lento. En otras palabras, no desea mostrar un logotipo de 300x200 en un dispositivo de teléfono plegable de 176x220. Una forma será a nombre de su archivo basado en el dominio que están en, por ejemplo:.
- file.css (4k) V.S. file-m.css (0.4k)
- logo.jpg (300px * 300px 15k) V.S. logo-m.jpg (100px * 40px 2k)
Y en su código PHP que puede tener una lógica para cargar dinámicamente JS, imágenes y archivos CSS. Como recordatorio, mientras más rápido cargue su sitio móvil, mejor será. La capacidad de mantenimiento es importante, pero tus usuarios también lo son. Si tiene un sitio móvil lento, tenderá a no ir a su sitio e ir a otro lugar. No todo el mundo usa una red 3G/4G o WiFi en su teléfono. Además, recomiendo utilizar la compresión de salida (como deflate) cuando desee acceder a sus archivos.
Esto mejorará su tiempo de carga, especialmente para los dispositivos móviles. Ahora, si utiliza el mismo archivo , digamos un archivo Javascript para enviar cartas informativas, no desea duplicarlo ni copiarlo con el nombre. En lugar de crear una lógica adicional en su PHP, puede crear un enlace simbólico de esta manera:
ln -s /var/www/js/file.js /var/www/js/file-m.js
Con esta solución, tendrá que volver a dirigir al sitio adecuado en función del tipo de dispositivo que utilicen. No desea que un teléfono plegable vea una versión de iPhone de su sitio. Aquí hay un par de truco que puede hacer para lograr esto:
// PHP version - also make sure the current domain is checked otherwise you will be in an infinite loop!
if(strpos($_SERVER['HTTP_USER_AGENT'],'iPhone') !== FALSE || strpos($_SERVER['HTTP_USER_AGENT'],'Android') !== FALSE)
{
header('Location: http://m.domain.com/');
exit();
}
O en la.htaccess/configuración de Apache en el sitio por defecto:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "iphone|android" [NC]
RewriteCond %{HTTP_HOST} !^mobile.domain.com
RewriteRule ^(.*)$ http://m.domain.com/ [L,R=301] # or 302 if you want temporary
# etc...
recomiendo mirar http://detectmobilebrowsers.com/ para averiguar lo que se puede utilizar para los dispositivos móviles y se puede comprobar http://validator.w3.org/mobile/ para asegurarse de que todo se ve bien para su dispositivo móvil.
A partir de los archivos PHP comunes, recomendaré utilizar un lugar de centralización, una ruta específica que puede usar y el mundo exterior no. Puede poner todo este código en una carpeta común donde todos los sitios pueden acceder a estos archivos. Ejemplo:
/web/lib/
De esta manera, nadie, excepto tú, puede acceder directamente a sus archivos. En su código PHP, hará algo como (por ejemplo, el script de inicio de sesión):
<?php
define('BASE_PATH', '/web/lib/');
require(BASE_PATH . 'filex.php');
// etc...
+1 buena pregunta, estoy en la misma situación y me gustaría saber la respuesta también. – aki
nota: no uso Memcache pero uso la misma versión de MySQL y PHP – aki