Redirect in base alla lingua preferita (Accept-Language) con .htaccess

Quando gli utenti chiedono / , voglio reindirizzarli a /en o /de , a seconda della loro preferenza specificata nell'intestazione HTTP richiesta Accept-Language .

Suppongo che questo sia facile con script sul lato server, ma ho bisogno di una soluzione .htaccess in quanto deve funzionare per un sito statico.

Quello che ho provato:

  • mod_negotiation (con una mappa di tipo o con l'opzione MultiViews ):

    Gli utenti hanno la loro lingua preferita, ma non vengono reindirizzati.

  • mod_rewrite ( RewriteCond %{HTTP:Accept-Language} ):

    Gli utenti vengono reindirizzati, ma non (necessariamente) ottengono la loro lingua preferita.

    (‡ Non garantisce che la lingua abbia un valore di qualità superiore a 0, né trova la lingua preferita nel caso in cui entrambe le lingue siano specificate con valori di qualità diversi.)

C'è una soluzione per questo?

Sia che la negoziazione dei contenuti sia reindirizzata in qualche modo o sia ansible verificare / confrontare i valori di qualità nella direttiva RewriteCond o qualcosa di completamente diverso.

  • Redirect subdomain al sottodominio Apache2
  • Qual è l'approccio consigliato per aggiungere sottodomini statici a un sito web?
  • Come redirect il traffico con Apache e Dlink 524T?
  • Tracciamento del traffico con Linux? (Uomo nel mezzo)
  • In Nginx, sottodomini specifici per la mappa nei porti, redirect tutti gli altri
  • Come redirect il sottodominio a un server alternativo con il supporto SSL?
  • Redirect tutti i sottodomini non di www al dominio principale di www con Apache2
  • iptables intercettano il traffico locale
  • 2 Solutions collect form web for “Redirect in base alla lingua preferita (Accept-Language) con .htaccess”

    Alcuni pensieri:

    Se si ha accesso alla configuration del server, potrebbe esserci un modo: l'utilizzo della direttiva RewriteMap nel server config.

    È quindi ansible submit l'intestazione Accept-Language a un Perl oa qualunque script che invierà indietro la lingua preferita che puoi utilizzare nel tuo RewriteRule con un 301.

    Se si ha accesso a una lingua come php , è ansible utilizzare un file index.php in " / " che invierà il reindirizzamento con l' header('Location: /en/static-pages.html') function header('Location: /en/static-pages.html') . Da php 5.3 c'è anche la function locale_accept_from_http() , che restituisce la preferita locale dall'intestazione.

    Ma importnte: vuoi che gli utenti "get their preferred language" . Sei sicuro che questa tecnica renda l'utente la lingua preferita? Tante persone non impostano questo nelle loro preferenze del browser. La selezione automatica della lingua deve essere (deve?) Essere combinata con il ricordo della scelta dell'utente (cookie) e la scelta dell'utente deve (deve?) Avere la precedenza sulla selezione automatica.

    Disclaimer: non ho provato questo. Ho usato qualcosa di simile in passato per questo tipo di logica, usando mod_alias per impostare le variables e lasciare che mod_rewrite gestisca le molteplici condizioni. Questo è più facile in Apache 2.4 con le istruzioni If.

     RewriteEngine On SetEnvIf Request_URI ^/$ toplevel SetEnvIf Accept-Language 'fr' lang_french RewriteCond %{ENV:toplevel} 1 RewriteCond %{ENV:lang_french} 1 RewriteRule ^ /fr [R=302,L] 

    Dovrei aggiungere che questo esempio utilizza la configuration apache e non .htaccess. Ricordo che ci sono alcune caveat intorno a mod_rewrite in .htaccess, ma non lo uso mai a causa delle sanzioni di latenza. In bocca al lupo!

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.