Nota:esta solución tiene más que ver con el rendimiento que con una solución rápida y finalmente terminé
Supongo que, dado que está utilizando Memcache, obtiene su contenido de una base de datos MySQL, luego lo analiza en PHP, lo guarda en el caché y lo muestra.
Cada versión tendría un dominio diferente. iPhone/Android (y otros teléfonos inteligentes) usarán el m.domain.com
dominio, las tabletas (iPad, galaxy, etc...) usarán t.domain.com
, todos los demás usarán o.domain.com
y el predeterminado usará www.domain.com
o domain.com
.
Todos estos subdominios pueden apuntar a la misma carpeta (/var/www/
- el predeterminado). Lo que hará el truco es cómo lo llames.
Agregue esta su configuración .htaccess o 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]
Entonces, en su archivo PHP puede usar el $_GET['subdomain']
y decide lo que necesitas hacer para generar tu página. De esta manera, es muy fácil de mantener, tiene 1 punto de entrada y puede configurar reglas en PHP para recuperar información sobre lo que necesita 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 tu sitio debería ser más ligera (CSS, Imágenes, 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 dispositivos de red más lentos. En otras palabras, no desea mostrar un logotipo de 300 x 200 en un dispositivo de teléfono plegable de 176 x 220. Una forma será nombrar su archivo según el dominio en el que se encuentra. Por ejemplo:
- archivo.css (4k) V.S. archivo-m.css (0.4k)
- logo.jpg (300px * 300px 15k) V.S. logo-m.jpg (100px * 40px 2k)
Y en su código PHP puede tener una lógica para cargar dinámicamente archivos JS, Imágenes y CSS. Recuerde, cuanto más rápido cargue su sitio móvil, mejor será. La mantenibilidad es importante, pero sus usuarios también lo son. Si tiene un sitio móvil lento, tenderán a no ir a su sitio y a ir a otro lugar. No todo el mundo utiliza la red 3G/4G o WiFi en su teléfono. Además, recomiendo usar 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 usas el mismo archivo, digamos un archivo Javascript para enviar boletines informativos, 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 como este:
ln -s /var/www/js/file.js /var/www/js/file-m.js
Con esta solución, deberá redirigir al sitio adecuado según el tipo de dispositivo que utilicen. No desea que un teléfono plegable vea una versión para iPhone de su sitio. Aquí hay un par de trucos que puedes 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 configuración de .htaccess/apache en el sitio predeterminado:
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 qué puede usar para los dispositivos móviles y puede consultar http://validator.w3.org /móvil/ para asegurarse de que todo se vea bien en su dispositivo móvil.
A partir de los archivos PHP comunes, recomendaré usar un lugar centralizado, una ruta específica que pueda 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 usted, podrá 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...