Novembre 22, 2024

URL Rewriting in base alla lingua del browser con Apache mod_rewrite

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.

giuseppe-urso-url-redirection-according-to-browser-language-01

Related posts

2 Comments

    1. Giuseppe Urso

      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

Leave a Reply

Your email address will not be published.