Redirección transparente a otro dominio por idioma con Apache
Hoy he necesitado hacer una redirección transparente (que el usuario no se entere de que lo estoy llevando a otro lado) según el idioma aceptado del navegador.
Para entendernos, si el usuario iba a http://bar.com con su navegado en inglés debía redireccionarlo a http://en.foo.com pero sin cambiar la dirección del navegador.
Lo primero que probé fue el típico:
RewriteCond %{HTTP:Accept-Language} ^en
RewriteRule ^/$ http://en.foo.com [L]
RewriteCond %{HTTP:Accept-Language} ^pt-BR
RewriteRule ^/$ http://br.foo.com [L]
RewriteCond %{HTTP:Accept-Language} ^pt
RewriteRule ^/$ http://pt.foo.com [L]
...
#Default Language
RewriteRule ^/$ http://foo.com [L]
Esto hacía la redirección pero al ser a otro dominio la hacía como si le pasáramos el flag R (vamos que hacía: [R,L]). Mas info sobre esto aquí.
La solución vino del módulo mod_proxy, y lo que he hecho ha sido usar el parámetro P (force proxy). La cosa ha quedado así:
RewriteCond %{HTTP:Accept-Language} ^en
RewriteRule ^/$ http://en.foo.com/ [P,L]
RewriteCond %{HTTP:Accept-Language} ^pt-BR
RewriteRule ^/$ http://br.foo.com [P,L]
RewriteCond %{HTTP:Accept-Language} ^pt
RewriteRule ^/$ http://pt.foo.com [P,L]
...
#Default language
RewriteRule ^/$ http://foo.com [P,L]
That’s all folks!
Categories: apache

