Nel caso in cui si ha la necessità di effettuare una redirection della request in base alla localizzazione del browser, può tornare utile il rewrite_module di Apache che fornisce un motore rule-based per riscrivere al volo le URL richieste da un client. Le condizioni per eseguire o meno l’URL Rewriting sono dettate dalla lingua impostata sul browser.
Un classico esempio è il caso di siti web multi-lingua, in cui sono previste URL differenti per ogni lingua supportata dal sito. Di seguito, due esempi.
English page URL
http://my-site.com/en/foo-page
Italian page URL
http://my-site.com/it/foo-page
In questo caso, un utente con locale IT dovrebbe essere riportato automaticamente alla pagina in lingua italiana. Allo stesso modo, l’utente inglese dovrebbe poter fruire dei contenuti in lingua inglese senza effettuare ulteriori clic per cambiare lingua. In questo articolo riporto un esempio di come impostare mod_rewrite su Apache per riscrivere l’URL in base alla locale del browser.
APPLICATION STACK
– CentOS 6.5 x86_64
– Apache 2.2.15
STEP 1. Check module
[root@]# httpd -M | grep rewrite Syntax OK rewrite_module (shared)
STEP 2. Mod_rewrite Settings
# /ect/httpd/conf.d/virtual_hosts.conf <VirtualHost *:80> ServerName my-site.com DocumentRoot "/var/www/html/my-site" RewriteEngine On ## Rewriting url for IT browser RewriteCond %{HTTP:Accept-Language} ^it [NC] RewriteRule ^/$ http://my-site.com/it/foo-page [L,R=301] ## Rewriting url for EN browser RewriteCond %{HTTP:Accept-Language} ^en [NC] RewriteRule ^/$ http://my-site.com/en/foo-page [L,R=301] </VirtualHost>
Per fare un test è sufficiente modificare manualmente la configurazione della lingua sul prioprio browser. Ecco un esempio su Firefox.
Ciao Giuseppe, ottimo POST!
un dubbio. il codice indicato, è da inserire solo nel file .htaccess ?
Grazie Stefano
Ciao Stefano,
dipende se il tuo Apache ha o meno una configurazione per-directory based e che prevede quindi l’utilizzo di file .htaccess per ogni singolo sito. Come vedi nell’articolo, io di solito evito questo approccio preferendo utilizzare un file globale per i miei virtual host (come suggerisce la docs uffciale https://httpd.apache.org/docs/2.2/howto/htaccess.html).
Nel mio caso ho configurato la rewrite rule in:
/ect/httpd/conf.d/virtual_hosts.conf
Giuseppe