Problema redirección URL (javascript)

Iniciado por motocros_elche, 27 Diciembre 2015, 12:45 PM

0 Miembros y 1 Visitante están viendo este tema.

motocros_elche

hace unos años, gracias a la ayuda de varios miembros en este foro, conseguí crear un archivo .php que redirigiese a la web que tuviese al final de la url.

web.com/archivo.php?page=web2.com redirigue a web2.com mostrando una web de espera durante unos segundos.

Ahora veo que ha dejado de funcionar en ciertos navegadores y no se si es por que usa javascript o por el hosting, pero me gustaría saber si es posible hacer lo mismo sin usar javascript.

Actualmente solo me funciona en firefox y no es por la cache.

Este es el código del archivo en cuestión:

<?php
if ( isset( $_GET['page'] )) {
$page $_GET['page'];
}
?>

<html>
<head>
<script type="text/javascript">
<!--
function delayer(){
   window.location = "<?php echo $page?>"
}
//-->
</script>
</head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php header("Content-Type: text/html; charset=utf-8");?>
<body onLoad="setTimeout('delayer()', 15000)">

<center>

<p>&nbsp;</p>
<b><p>Esta siendo redirigido a la página web</p></b>
<p></p>
</p>
</center>
</body>
</html>


He supuesto que tal vez es por lo que sucedió con la seguridad que los navegadores bloquearon javascript y demás.
Así que no sé si es posible hacer esto sin javascript o si es algún error del código que debo actualizar, de antemano, muchas gracias.

furby86

Buenas tardes motocros_elche.

La solución pasa por incorporar el siguiente código dentro de la condición if para el GET de $page

<?php
if ( isset( $_GET['page'] )) {
    
$page $_GET['page'];
    
header("Location: $page");
}
?>


Es importante que la función header se ejecute antes de la impresión de caracteres HTML, si eso pasa ya no funciona.

Espero que te ayude con tu problema.

motocros_elche

Cita de: furby86 en 27 Diciembre 2015, 14:36 PM
Buenas tardes motocros_elche.

La solución pasa por incorporar el siguiente código dentro de la condición if para el GET de $page

<?php
if ( isset( $_GET['page'] )) {
    
$page $_GET['page'];
    
header("Location: $page");
}
?>


Es importante que la función header se ejecute antes de la impresión de caracteres HTML, si eso pasa ya no funciona.

Espero que te ayude con tu problema.
hola, gracias por tu respuesta, he añadido esa linea al código y ahora lo que hace es rediriguir sin tiempo de espera y sin mostrar la web de redirección.
Por lo que veo donde no funciona es en opera solamente, (borra la url de redirección), aún que usando el código que has puesto, redirecciona en todos los navegadores, pero claro, deja de funcionar el tiempo de espera y no muestra la web de redirección...

xiruko

#3
Código (php) [Seleccionar]

<?php
function goto($url$delay=0) {
    
header("refresh: $delay$url");
}
?>


Esta función redireccionará a $url en $delay segundos. En tu caso:

Código (php) [Seleccionar]

<?php
if (isset( $_GET['page'])) {
    goto(
$_GET['page'], 15);
}
?>


Será en 15 segundos.

Saludos!

gAb1

Ya somos 3  ;D

Simplemente recordar que para que funcione como quieres el mensaje debe ir despues del header, un ejemplo y otra manera de hacerlo:

Código (php) [Seleccionar]
header('Refresh: 5; url=' . $_GET['page']);
echo 'Please Log In First';


Espero que no te hayas olvidado de limpiar la url, cualquiera podría inyectar código malicioso y hacer ataques XSS (y a saber que más).

Te recomiendo que cuanto menos "user input" uses directamente en tus aplicaciones mejor. Lo más seguro es usar ids (enteros) y compararlos con los que especifiques manualmente (si no son muchas urls) así no habrá ningún problema:

Código (php) [Seleccionar]
$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;

if ($id > 0) {
    $page = '';
    switch ($id) {
        case 1: $page = 'http://foro.elhacker.net/'; break;
        case 2: $page = 'http://foro.elhacker.net/'; break;
        case 3: $page = 'http://foro.elhacker.net/'; break;
        case 4: $page = 'http://foro.elhacker.net/'; break;
    }
    header('Refresh: 15; url=' . $page);
}


Que es el equivalente a:

Código (html5) [Seleccionar]
<meta http-equiv="refresh" content="15; url=<?php echo $page?>">