Ricerca nel sito web

Apache 2 reindirizza e riscrive in base al dispositivo utilizzato


Su questa pagina

  1. 1 Nota preliminare
  2. 2 Abilitazione mod_rewrite
  3.  3 Configurazione di Apache per consentire le regole di riscrittura nei file .htaccess
  4.  4 Creazione di regole di riscrittura
  5. 5 collegamenti

Dato il massiccio aumento di smartphone e tablet come iPhone, iPad, telefoni e tablet Android, BlackBerry, ecc., potresti aver pensato di creare una versione mobile del tuo sito web. Questo tutorial spiega come configurare Apache per servire la versione mobile del tuo sito web se il visitatore utilizza un dispositivo mobile e la versione normale se il visitatore utilizza un PC desktop standard. Ciò può essere ottenuto con il modulo di riscrittura di Apache.

1 Nota preliminare

In questo tutorial, il mio sito web \normale\ è accessibile da http://www.example.com e http://example.com, mentre il mio sito mobile si chiama http://m.example.com. Questi vhost esistono già sul mio sistema, quindi non spiegherò come configurarli.

2 Abilitazione mod_rewrite

Innanzitutto, devi assicurarti che il modulo Apache mod_rewrite sia abilitato. Questo modulo consente di eseguire un reindirizzamento httpd, un reindirizzamento apache e un URL di riscrittura apache tramite un server Web Apache. Su Debian/Ubuntu, puoi abilitarlo in questo modo:

a2enmod rewrite

Riavvia Apache dopo - per Debian/Ubuntu, il comando è:

/etc/init.d/apache2 restart

3 Configurare Apache per consentire le regole di riscrittura nei file .htaccess

Il mio sito web \normale\ www.example.com/example.com ha il file di configurazione vhost /etc/apache2/sites-available/www.example.com.vhost e la root del documento /var/www/www.example .com/web.

Il mio sito mobile m.example.com ha il file di configurazione vhost /etc/apache2/sites-available/m.example.com.vhost e la root del documento /var/www/www.example.com/mobile.

Voglio inserire le regole di riscrittura per ogni sito in un file .htaccess (sebbene sia anche possibile inserirle direttamente nel file di configurazione vhost) con get read dal server http apache. Pertanto devo prima modificare le nostre configurazioni vhost in modo che entrambi i file .htaccess possano contenere direttive di riscrittura. Possiamo farlo con la riga AllowOverride All (che consente a .htaccess di sovrascrivere tutte le impostazioni nella configurazione del vhost, la configurazione del server):

vi /etc/apache2/sites-available/www.example.com.vhost
[...]
        <Directory /var/www/www.example.com/web/>
                AllowOverride All
	</Directory>
[...]
vi /etc/apache2/sites-available/m.example.com.vhost
[...]
        <Directory /var/www/www.example.com/mobile/>
                AllowOverride All
        </Directory>
[...]

Riavvia Apache in seguito:

/etc/init.d/apache2 restart

4 Creazione di regole di riscrittura

Ora creiamo le regole di riscrittura per il sito Web \normale\ www.example.com/example.com che reindirizzerà tutti gli utenti di dispositivi mobili alla versione mobile m.example.com - Mi concentro sui dispositivi/agenti utente pertinenti qui, che sono Android, Blackberry, Googlebot-mobile (bot di ricerca mobile di Google), IE Mobile, iPad, iPhone, iPod, Opera Mobile, PalmOS e WebOS.

Il file /var/www/www.example.com/web/.htaccess ha il seguente aspetto:

vi /var/www/www.example.com/web/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
RewriteRule ^$ http://m.example.com/ [L,R=302]
</IfModule>

Per il nostro sito web mobile m.example.com, le regole di riscrittura che reindirizzano tutti gli utenti che non utilizzano un dispositivo mobile al nostro sito web \normale\ www.example.com/example.com sono le seguenti: Ho negato il RewriteCond condizione dal precedente file .htaccess:

vi /var/www/www.example.com/mobile/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "!(android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^$ http://www.example.com/ [L,R=302]
</IfModule>

Ecco fatto, abbiamo impostato la nostra direttiva di reindirizzamento! Ora puoi fare alcuni test, ad es. visita m.example.com con un browser desktop standard:

Se tutto va bene, dovresti essere reindirizzato a www.example.com:

Ora prova con un dispositivo mobile (io uso un telefono Android qui) e vai su www.example.com:

Dovresti essere reindirizzato a m.example.com:

5 collegamenti

  • Apache: http://httpd.apache.org/
  • Modulo Apache mod_rewrite: http://httpd.apache.org/docs/current/mod/mod_rewrite.html