Nota:questa soluzione riguarda più le prestazioni che la soluzione rapida e finalmente ho finito
Presumo che dal momento che stai usando memcache tu ottenga il tuo contenuto da un database MySQL, quindi lo analizzi in PHP, lo salvi nella cache e lo visualizzi.
Ogni versione avrebbe un dominio diverso. iPhone/Android (e altri smartphone) utilizzeranno m.domain.com
dominio, tablet (iPad, galaxy ecc...) utilizzeranno t.domain.com
, tutti gli altri utilizzeranno o.domain.com
e l'impostazione predefinita utilizzerà www.domain.com
o domain.com
.
Tutti questi sottodomini possono puntare alla stessa cartella (/var/www/
- quello di default). Quello che farà il trucco è come lo chiami.
Aggiungi questo alla tua configurazione .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]
Quindi nel tuo file PHP puoi usare il $_GET['subdomain']
e decidi cosa devi fare per generare la tua pagina. In questo modo è molto facile da mantenere, hai 1 punto di ingresso e puoi impostare regole in PHP per recuperare informazioni su ciò che devi visualizzare (il contenuto sarà lo stesso, cambierà solo il layout).
Una cosa che consiglio sarà di ottimizzare i tuoi file. La versione mobile del tuo sito dovrebbe essere in qualche modo più leggera (CSS, Immagini, JS). Non vuoi che il tuo utente carichi CSS, JS e immagini di grandi dimensioni da un dispositivo mobile con una rete lenta. Vuoi ottimizzare il più possibile per un dispositivo di rete più lento. In altre parole, non si desidera visualizzare un logo 300x200 su un dispositivo flip phone 176x220. Un modo sarà quello di nominare il tuo file in base al dominio in cui si trova. Ad esempio:
- file.css (4k) VS file-m.css (0.4k)
- logo.jpg (300px * 300px 15k) VS logo-m.jpg (100px * 40px 2k)
E nel tuo codice PHP puoi avere una logica per caricare dinamicamente file JS, immagini e CSS. Ricordiamo che più velocemente carichi il tuo sito mobile, meglio è. La manutenzione è importante, ma lo sono anche i tuoi utenti. Se hai un sito mobile lento, tenderanno a non andare sul tuo sito e andare da qualche altra parte. Non tutti utilizzano la rete 3G/4G o il Wi-Fi sul proprio telefono. Inoltre, consiglio di utilizzare la compressione dell'output (come deflate ) quando vuoi accedere ai tuoi file.
Ciò migliorerà il tuo tempo di caricamento, specialmente per i dispositivi mobili. Ora, se usi lo lo stesso file, diciamo un file Javascript per inviare una newsletter, non vuoi duplicarlo né copiarlo con il nome. Invece di creare una logica aggiuntiva nel tuo PHP, puoi creare un collegamento simbolico come questo:
ln -s /var/www/js/file.js /var/www/js/file-m.js
Con questa soluzione, dovrai reindirizzare al sito appropriato a seconda del tipo di dispositivo che utilizza. Non vuoi che un telefono a conchiglia visualizzi una versione iPhone del tuo sito. Ecco un paio di trucchi che puoi fare per raggiungere questo obiettivo:
// 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();
}
OPPURE nella configurazione .htaccess/apache nel sito predefinito:
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...
Consiglio di dare un'occhiata a http://detectmobilebrowsers.com/ per scoprire cosa puoi utilizzare per i dispositivi mobili e puoi controllare http://validator.w3.org /cellulare/ per assicurarti che tutto sia perfetto per il tuo dispositivo mobile.
Come per i comuni file PHP, consiglierò di utilizzare un posto centralizzato, un percorso specifico che puoi utilizzare e il mondo esterno non può. Puoi mettere tutto questo codice in una cartella comune in cui tutti i siti possono accedere a questi file. Esempio:
/web/lib/
In questo modo nessuno, tranne te, può accedere direttamente ai tuoi file. Nel tuo codice PHP farai qualcosa del tipo (ad esempio lo script di accesso):
<?php
define('BASE_PATH', '/web/lib/');
require(BASE_PATH . 'filex.php');
// etc...