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.

  • Letsencrypt - devo mantenere "ben noto" accessibile per il rinnovo del certificato?
  • Munin: alcune pluggin hanno smesso di funzionare dopo essere state trasferite in host * virtuale diverso
  • Dove i file del sito potrebbero essere situati?
  • la logging di http POST in apache?
  • Autenticazione di Apache HTTPd su più server LDAP con account scaduti
  • Apache 2: FileMatch / FileNotMatch negativi
  • 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.

  • SSH torna alla macchina locale da una session SSH remota
  • Come distriggersre temporaneamente i forward locali
  • Mi sono bloccato da SSH con UFW
  • Timeout di connessione quando si prova a SSH
  • hosts.deny ignorato da MacOSX 10.8
  • Ordine delle regole mod_rewrite in .htaccess non seguite
  • 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.