Redirecionamento dependendo do idioma preferido (Accept-Language) com .htaccess

4

Quando os usuários solicitarem / , desejo redirecioná-los para /en ou /de , dependendo de sua preferência especificada no cabeçalho de solicitação de HTTP Accept-Language .

Eu acho que isso é fácil com scripts do lado do servidor, mas eu preciso de uma solução .htaccess , pois tem que trabalhar para um site estático.

O que eu tentei:

  • mod_negotiation (com um mapa de tipos ou com o MultiViews option):

    Os usuários recebem o idioma de sua preferência, mas eles não são redirecionados.

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

    Os usuários são redirecionados, mas eles (necessariamente ‡) não recebem o idioma de sua preferência.

    (‡ Tampouco garante que o idioma tenha um valor de qualidade maior que 0, nem encontra o idioma preferido caso ambos os idiomas sejam especificados com diferentes valores de qualidade.)

Existe uma solução para isso?

Seja fazendo redirecionamento de negociação de conteúdo de alguma forma, ou permitindo verificar / comparar valores de qualidade na diretiva RewriteCond , ou algo totalmente diferente.

    
por unor 02.01.2015 / 06:30

2 respostas

1

Algumas ideias:

Se você tiver acesso à configuração do servidor, poderá haver uma maneira: o uso do RewriteMap na sua configuração do servidor.

Você pode enviar o cabeçalho Accept-Language para um Perl ou qualquer outro script, que enviará de volta o idioma preferido que você pode usar em seu RewriteRule com um 301.

Se você tiver acesso a um idioma como php , poderá usar um arquivo index.php em " / " que enviará o redirecionamento com a função header('Location: /en/static-pages.html') . Do php 5.3, há também a função locale_accept_from_http() , que retorna a localidade preferida do cabeçalho.

Mas é importante: você deseja que os usuários compartilhem "get their preferred language" . Você tem certeza de que essa técnica faz com que o usuário tenha seu idioma preferido? Muitas pessoas não definem isso nas preferências do navegador. A seleção automática de idioma deve (deve?) Ser combinada com a lembrança da escolha do usuário, (cookie), e a escolha do usuário deve (deve?) Ter precedência sobre a seleção automática.

    
por 03.01.2015 / 15:27
0

Aviso: Eu não testei isso. Eu usei algo similar no passado para esse tipo de lógica, usando mod_alias para definir as variáveis e deixar o mod_rewrite lidar com as múltiplas condições. Isso fica mais fácil no Apache 2.4 com instruções 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]

Devo acrescentar que este exemplo está usando a configuração do apache e não o .htaccess. Lembro-me de haver algumas ressalvas ao redor do mod_rewrite no .htaccess, mas nunca o uso devido às penalidades de latência. Boa sorte!

    
por 02.01.2015 / 06:43