Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/05/2017, 09:27
Avatar de berkeleyPunk
berkeleyPunk
 
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 9 meses
Puntos: 22
Pregunta Cuál es la mejor forma de hacer redirección sin caer en bucle!

Hola, voy al grano.

Tengo un Joomla multi-idioma que de momento sólo tiene 2 idiomas:
  1. mi-dominio.com/es/
  2. mi-dominio.com/en/
La idea es redirigir al visitante a la versión de tal idioma según su IP (empleo esta librería). No habría ningún problema en hacer esto si la redirección se hiciera en un index.php y redirigiera a index-es.php o a index-en.php. Pero no existen index para cada idioma, sólo existe un index.php para todo.

El problema es que si hago un header:location dentro del index.php para que redirija a mi-dominio.com/es/ esto funciona, pero evidentemente cuando entre a mi-dominio.com/es/ se leerá nuevamente el index.php y por tanto se leerá nuevamente la redirección, y por consiguiente esto provoca un bucle infinito que causa un error: Chrome dice que hubo un error y no pudo cargarse la página porque el website intentó múltiples redirecciones.

¿Cómo evitar que redirija en un bucle infinito?

Finalmente me las arreglé así, pero dudo mucho que sea la mejor forma de hacerlo:
Código PHP:
if ( !isset($_SESSION["pais_cliente"]) ) {
    
$_SESSION["pais_cliente"] = getCountryFromIP($_SERVER["REMOTE_ADDR"]);
    
$pais_cliente $_SESSION["pais_cliente"];
    
$_SESSION["num_redirecciones"] = 1;

    if ( (
$pais_cliente == "EN") || ($pais_cliente == "UK") ) {
        
header('Location: http://www.mi-dominio.com/en/');
    }
    else {
        
header('Location: http://www.mi-dominio.com/es/');
    }
}
else {
    
$_SESSION["num_redirecciones"] ++;
    
$pais_cliente $_SESSION["pais_cliente"];

    if ( 
$_SESSION["num_redirecciones"] <= ) {
        if ( (
$pais_cliente == "EN") || ($pais_cliente == "UK") ) {
            
header('Location: http://www.mi-dominio.com/en/');
        }
        else {
            
header('Location: http://www.mi-dominio.com/es/');
        }
    }

Como verán, sólo permito que el bucle de redirecciones itere 2 veces máximo. Si después de eso visito nuevamente la página, evidentemente ya no se hace redirección y la página ya no me redirige a la versión en español o inglés según mi IP.

¿Cómo arreglo esto?

Saludos

Última edición por berkeleyPunk; 13/05/2017 a las 09:39