¿Cómo hago una redirección en PHP?


1262

¿Es posible redirigir a un usuario a una página diferente mediante el uso de PHP?

Digamos que el usuario acude www.example.com/page.phpy quiero redirigirlos www.example.com/index.php, ¿cómo lo haría sin el uso de una meta actualización? ¿Es posible?

Esto incluso podría proteger mis páginas de usuarios no autorizados.


Puede actualizar el encabezado en PHP: encabezado
Zack Marrapese

11
@Sam: al igual que el nodo lateral, no implemente ningún tipo de protection from unauthorized usersredireccionamiento; así no es como se deben hacer las cosas;)
Strae

77
@Strae ¿Qué tiene de malo proteger las páginas con redireccionamiento? Entonces, ¿cuál es la mejor manera?

66
La redirección de @PravindaAmarathunga es uno de los elementos, pero no el único. Solo asegúrese de que los elementos protegidos no se emitan para usuarios no autorizados; El redireccionamiento del navegador se puede deshabilitar en el lado del cliente, por ejemplo: si el navegador no realiza el redireccionamiento y la página original sale como normal, ¿qué vería el usuario? Los CMS generalmente hacen la redirección y no imprimen elementos protegidos, reemplazando la salida normal con un mensaje de cortesía.
Strae

@PravindaAmarathunga revisa el enlace de la respuesta de markus: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Strae

Respuestas:


1699

Resumen de respuestas existentes más mis propios dos centavos:

1. Respuesta básica

Puede usar la header()función para enviar un nuevo encabezado HTTP, pero debe enviarse al navegador antes de cualquier HTML o texto ( <!DOCTYPE ...>por ejemplo, antes de la declaración).

header('Location: '.$newURL);

2. Detalles importantes

morir () o salir ()

header("Location: http://example.com/myOtherPage.php");
die();

Por qué deberías usar die()o exit(): The Daily WTF

URL absoluta o relativa

Desde junio de 2014 se pueden usar tanto las URL absolutas como las relativas. Consulte RFC 7231, que había reemplazado al antiguo RFC 2616 , donde solo se permitían las URL absolutas.

Códigos de estado

El encabezado "Ubicación" de PHP todavía usa el código de redirección HTTP 302 , pero este no es el que debe usar. Debería considerar 301 (redirección permanente) o 303 (otro).

Nota: W3C menciona que el encabezado 303 es incompatible con "muchos agentes de usuario anteriores a HTTP / 1.1. Los navegadores utilizados actualmente son todos agentes de usuario HTTP / 1.1. Esto no es cierto para muchos otros agentes de usuario como arañas y robots.

3. Documentación

Encabezados HTTP y la header()función en PHP

4. Alternativas

Puede usar el método alternativo http_redirect($url);que necesita que se instale el paquete PECL pecl .

5. Funciones de ayuda

Esta función no incorpora el código de estado 303:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);

    exit();
}

Redirect('http://example.com/', false);

Esto es más flexible:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6. Solución

Como se mencionó, los header()redireccionamientos solo funcionan antes de que se escriba algo. Suelen fallar si se invocan en medio de la salida HTML . Entonces puede usar una solución alternativa de encabezado HTML (¡no muy profesional!) Como:

 <meta http-equiv="refresh" content="0;url=finalpage.html">

O incluso una redirección de JavaScript.

window.location.replace("http://example.com/");

55
Algunos problemas con esta respuesta: 303 puede no ser el código de estado "correcto". 301 puede ser deseado para Google, por ejemplo. En segundo lugar, header('Location: '.$newURL);debe ser antes de que se haya pasado cualquier HTML (o texto) al navegador, o no funcionará correctamente.
Chuck Le Butt

66
La historia diaria de WTF es común, lamentablemente. De todos modos, no es el dado perdido lo que causa el problema, sino un mal diseño. Cerrar el proceso violentamente está mal en el 99.9% de los casos. Una solución común y más limpia (no es mi favorita de todos modos) es lanzar una excepción RedirectionException y capturarla en el punto de entrada de la aplicación. Después de eso, puede tener todas sus llamadas "después *" (registros / cerrar conexiones / lo que sea)
robertodecurnex

44
El http-equiv="Location"no es compatible con todos los navegadores. ¡Deberías usar refreshen su lugar! <meta http-equiv="refresh" content="0;url=http://example.com/">
Timo002

71
Nunca emita un 301 a menos que lo diga en serio . 301 significa permanente, y permanente significa permanente , lo que significa que será almacenado en caché por los agentes del usuario, lo que significa largas noches llenas de cafeína mirando los registros de aplicaciones preguntándose si te estás volviendo loco porque juras que alguna página debería haber sido llamada o actualizada y juras para Dios funciona en su máquina pero no en la del cliente. Si absolutamente debe llamar a un 301, coloque una edad máxima de control de caché en el recurso. No tienes una sabiduría infinita y no deberías estar actuando como lo haces.
madumlao

2
Pero, ¿hay alguna razón para usar morir sobre la salida? La salida parece más limpia y más apropiada.
ars265

122

Use la header()función para enviar un encabezado HTTPLocation :

header('Location: '.$newURL);

Al contrario de lo que algunos piensan, die()no tiene nada que ver con la redirección. Úselo solo si desea redirigir en lugar de la ejecución normal.

Archivo example.php :

<?php
    header('Location: static.html');
    $fh = fopen('/tmp/track.txt', 'a');
    fwrite($fh, $_SERVER['REMOTE_ADDR'] . ' ' . date('c') . "\n");
    fclose($fh);
?>

Resultado de tres ejecuciones:

bart@hal9k:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00

Reanudación: obligatorio die()/ exit()es una leyenda urbana que no tiene nada que ver con PHP real. No tiene nada que ver con que el cliente "respete" el Location:encabezado. Enviar un encabezado no detiene la ejecución de PHP, independientemente del cliente utilizado.


8
die () o exit () es para clientes que no respetan el encabezado "Ubicación: ..."
clawr

12
@clawr: No, exit()es para evitar que la página muestre el contenido restante (piense en páginas restringidas). vartec tiene razón, no tiene nada que ver con el encabezado de ubicación HTTP y no es necesario exit. Elegí incluirlo en mi respuesta porque, para alguien que no sabe cómo hacer una redirección simple , uno podría jugar con seguridad en lugar de no implementar un paso simple pero crucial para poder aprovechar el proceso avanzado controlar.
Alix Axel

1
Pero los navegadores que respetan el encabezado abandonarán la página y cerrarán la conexión mientras su script aún se está ejecutando. Esto es totalmente malo. PHP continuará con el script por algún tiempo (es por eso que su código se ejecuta) pero puede abortarlo aleatoriamente en medio de la ejecución, dejando cosas rotas. Llamar a ignore_user_abort () evitará esto, pero sinceramente no vale la pena. Simplemente continúe con su escritura HTML (aunque probablemente sea inútil) pero no haga cosas que escriban en el disco o la base de datos después de un encabezado ('Ubicación:'); Escriba en el disco antes de la redirección si es posible. [También: la url debe ser absoluta.]
FrancescoMM

¿Hay alguna forma de redirigir antes de que el navegador detecte el protocolo HTTP? La razón por la que necesito redirigir es porque no puedo obtener suficientes certificados SSL para todos mis dominios. solía .htaccessredirigir, pero necesito una forma de transmitir de alguna manera qué dominio redirigió al dominio final.
oldboy

109
function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

Redirect('http://www.google.com/', false);

¡No olvides morir () / salir ()!


66
Y no olvide el búfer de salida o terminará con 'Encabezados ya enviados'.
Kuroki Kaze el

8
... y no se olvide de imprimir algo así como "se le redirigirá a $ nepage en $ n segundos, haga clic en el enlace $ aquí si no se realiza la redirección" Algunos broser y algunas configuraciones del navegador pueden fallar esa redirección.
Strae

3
@DaNieL: este tipo de redireccionamiento no tomará "$ n segundos". Será instantáneo si sucede, y cualquier navegador conforme debería manejarlo. Creo que estás pensando en las redirecciones de "meta actualización" que las personas usan cuando no conocen mejor.
rmeador

1
@rmeador ... Para navegadores antiguos y navegadores especiales. Primero debe hacer su encabezado de ubicación, si falla, tenga una meta-redirección con el "será redirigido a la página en x segundos" con un enlace en caso de que la meta-redirección falle. Esa es la forma correcta y segura de hacer una redirección.
Andrew Moore el

3
Andrew: ¿cómo puede el navegador HTTP no respetar la ubicación?
vartec

102

Salida de JavaScript desde PHP usando echo, que hará el trabajo.

echo '<script type="text/javascript">
           window.location = "http://www.google.com/"
      </script>';

Realmente no puede hacerlo en PHP a menos que guarde en búfer la salida de la página y luego verifique la condición de redireccionamiento. Eso podría ser demasiado complicado. Recuerde que los encabezados son lo primero que se envía desde la página. La mayor parte de la redirección generalmente se requiere más adelante en la página. Para eso, debe almacenar en búfer toda la salida de la página y verificar la condición de redireccionamiento más adelante. En ese punto, puede redirigir el encabezado de usuario de la página () o simplemente hacer eco de la salida almacenada en búfer.

Para más información sobre el almacenamiento en búfer (ventajas)

¿Qué es el búfer de salida?


2
¡Respuesta simple y directa! ¡Ideal para una simple redirección de página!
Stathis Andronikos

Y de esa manera no te encuentras con el Cannot modify header information - headers already sent byerror común .
Kai Noack

1
@hmd, ¿qué pasa si javascript está deshabilitado?
Istiaque Ahmed

@IstiaqueAhmed javascript casi siempre está habilitado en estos días, pero si está deshabilitado, puede usar el búfer PHP. Esta pregunta SO responde eso. Si está utilizando PHP Buffering, entonces no necesita este método, supongo.
Hammad Khan

Falso, puede (y debe) hacerlo en PHP incluso sin almacenamiento en búfer: en una página bien diseñada, todo el procesamiento PHP relevante debe tener lugar antes de enviar cualquier contenido HTML al usuario. De esa manera, las redirecciones PHP funcionarán bien.
MestreLion

91

1. Usando la función de encabezado con exit()

<?php 
     header('Location: target-page.php');
     exit();
?>

pero si usa la función de encabezado, algunas veces recibirá "advertencia como si el encabezado ya se hubiera enviado" para resolver que no se repita o imprima antes de enviar encabezados o simplemente puede usar die()o exit()después de la función de encabezado.

2. Sin encabezado

<?php 
    echo "<script>location.href='target-page.php';</script>";
?>

aquí no tendrás ningún problema

3. Uso de la función de encabezado con ob_start()yob_end_flush()

<?php
ob_start(); //this should be first line of your page
header('Location: target-page.php');
ob_end_flush(); //this should be last line of your page
?>

Trabajar como un encanto. Yo uso <? Php echo "<script> location.href = ' google.fr/ '; </script >"; ?> Para probarlo, e hizo lo que quería
DoctorDroid Haiti

1
La segunda solución no funcionará con JS deshabilitado.
Tajni

55

¡La mayoría de estas respuestas están olvidando un paso muy importante!

header("Location: myOtherPage.php");
die();

Dejar esa segunda línea vital podría hacerte terminar en The Daily WTF . El problema es que los navegadores no tienen que respetar los encabezados que devuelve su página, por lo que si se ignoran los encabezados, el resto de la página se ejecutará sin redireccionamiento.


1
¿Qué hay de dar algo de salida al usuario antes de matar el script? Ya sabes, la gente le encanta saber lo que es happenin ...
Strae

3
estás asumiendo que el script no tiene nada que hacer excepto redirigir. Lo que podría no ser cierto en absoluto.
vartec

13
@DaNieL: cámbielo a morir ("¡Deja de ignorar mis encabezados!")
nickf

3
Me gustó esa simple explicación que die();usted dio: si no lo hace, el usuario puede ver la página completa por un momento si la usa; el usuario será redirigido y no se mostrará ningún problema temporal de contenido + 1
TheBlackBenzKid

Es posible que se produzca una actividad útil después de enviar el encabezado, actividad que no envía nada al navegador, pero registra la actividad o termina de registrar las transacciones. Por esta razón, la necesidad de morir / salir depende de la secuencia de comandos.
DanAllen

28

Utilizar:

<?php header('Location: another-php-file.php'); exit(); ?>

O si ya ha abierto etiquetas PHP, use esto:

header('Location: another-php-file.php'); exit();

También puede redirigir a páginas externas, por ejemplo:

header('Location: https://www.google.com'); exit();

Asegúrese de incluir exit()o incluir die().


25

Puede usar variables de sesión para controlar el acceso a las páginas y también autorizar usuarios válidos:

<?php
    session_start();

    if (!isset( $_SESSION["valid_user"]))
    {
        header("location:../");
        exit();
    }

    // Page goes here
?>

http://php.net/manual/en/reserved.variables.session.php .

Recientemente, tuve ciberataques y decidí que necesitaba conocer a los usuarios que intentaban acceder al Panel de administración o parte reservada de la Aplicación web.

Entonces, agregué un acceso de registro para la dirección IP y las sesiones de usuario en un archivo de texto, porque no quiero molestar a mi base de datos.


19

Muchas de estas respuestas son correctas, pero suponen que tiene una URL absoluta, lo que puede no ser el caso. Si desea utilizar una URL relativa y generar el resto, puede hacer algo como esto ...

$url = 'http://' . $_SERVER['HTTP_HOST'];            // Get the server
$url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
$url .= '/your-relative/path-goes/here/';            // <-- Your relative path
header('Location: ' . $url, true, 302);              // Use either 301 or 302

16

header( 'Location: http://www.yoursite.com/new_page.html' );


¿Hay alguna forma de redirigir antes de que el navegador detecte el protocolo HTTP? La razón por la que necesito redirigir es porque no puedo obtener suficientes certificados SSL para todos mis dominios. solía .htaccessredirigir, pero necesito una forma de transmitir de alguna manera qué dominio redirigió al dominio final.
oldboy

16

Utiliza el siguiente código:

header("Location: /index.php");
exit(0);   

14

Ya he respondido esta pregunta, pero lo volveré a hacer ya que, mientras tanto, he aprendido que hay casos especiales si está ejecutando en la CLI (los redireccionamientos no pueden ocurrir y, por lo tanto, no deberían exit()) o si su servidor web está ejecutando PHP como un (F) CGI (necesita un Statusencabezado previamente configurado para redirigir correctamente).

function Redirect($url, $code = 302)
{
    if (strncmp('cli', PHP_SAPI, 3) !== 0)
    {
        if (headers_sent() !== true)
        {
            if (strlen(session_id()) > 0) // If using sessions
            {
                session_regenerate_id(true); // Avoids session fixation attacks
                session_write_close(); // Avoids having sessions lock other requests
            }

            if (strncmp('cgi', PHP_SAPI, 3) === 0)
            {
                header(sprintf('Status: %03u', $code), true, $code);
            }

            header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
        }

        exit();
    }
}

También he manejado el tema de apoyo a los diferentes códigos de redirección HTTP ( 301, 302, 303y 307), ya que se trata en los comentarios de mi respuesta anterior. Aquí están las descripciones:

  • 301 - Movido permanentemente
  • 302 - Encontrado
  • 303 - Ver otros
  • 307 - Redirección temporal (HTTP / 1.1)

11

Para redirigir al visitante a otra página (particularmente útil en un bucle condicional), simplemente use el siguiente código:

<?php
    header('Location: mypage.php');
?>

En este caso, mypage.phpes la dirección de la página a la que le gustaría redirigir a los visitantes. Esta dirección puede ser absoluta y también puede incluir los parámetros en este formato:mypage.php?param1=val1&m2=val2)

Camino relativo / absoluto

Cuando se trata de rutas relativas o absolutas, es ideal elegir una ruta absoluta desde la raíz del servidor (DOCUMENT_ROOT). Use el siguiente formato:

<?php
    header('Location: /directory/mypage.php');
?>

Si alguna vez la página de destino está en otro servidor, incluye la URL completa:

<?php
    header('Location: http://www.ccm.net/forum/');
?>

Encabezados HTTP

Según el protocolo HTTP, los encabezados HTTP deben enviarse a beforecualquier tipo de contenido. Esto significa que nunca se deben enviar caracteres antes del encabezado, ¡ni siquiera un espacio vacío!

Redirecciones temporales / permanentes

Por defecto, el tipo de redireccionamiento presentado anteriormente es temporal. Esto significa que los motores de búsqueda, como Google Search, no tendrán en cuenta la redirección al indexar.

Si desea notificar a los motores de búsqueda que una página se ha movido permanentemente a otra ubicación, use el siguiente código:

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: new_address');
?>

Por ejemplo, esta página tiene el siguiente código:

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: /pc/imprimante.php3');
    exit();
?>

Cuando haces clic en el enlace de arriba, se te redirige automáticamente a esta página. Además, es una redirección permanente (Estado: 301 movido permanentemente). Entonces, si escribe la primera URL en Google, será redirigido automáticamente al segundo enlace redirigido.

Interpretación del código PHP

El servidor interpretará el código PHP ubicado después del encabezado (), incluso si el visitante se mueve a la dirección especificada en la redirección. En la mayoría de los casos, esto significa que necesita un método para seguir la header()función de la exit()función a fin de disminuir la carga del servidor:

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: address');
    exit();
?>

¿Por qué (cerca del final del segundo párrafo)? ¿Quieres decir en su &paralugar (así que todo se lee mypage.php?param1=val1&param2=val2))? (La entidad HTML para ) es "¶", ¿quizás algún programa externo realizó una conversión?).
Peter Mortensen

9

Utilizar:

<?php
    header('Location: redirectpage.php');
    header('Location: redirectpage.php');
    exit();
    echo "<script>location.href='redirectpage.php';</script>";
?>

Esta es una redirección PHP normal y normal, pero puede hacer una página de redireccionamiento con unos segundos de espera con el siguiente código:

<?php
    header('refresh:5;url=redirectpage.php '); // Note: here 5 means 5 seconds wait for redirect.
?>

7

En vísperas de la web semántica, la corrección es algo a considerar. Desafortunadamente, el encabezado de "Ubicación" de PHP todavía usa el código de redirección HTTP 302 , que, estrictamente, no es el mejor para la redirección. El que debería usar en su lugar, es el 303 .

W3C tiene la amabilidad de mencionar que el encabezado 303 es incompatible con "muchos agentes de usuario anteriores a HTTP / 1.1", lo que equivaldría a ningún navegador en uso actual. Entonces, el 302 es una reliquia, que no debe usarse.

... o podrías ignorarlo, como todos los demás ...


7

Puede usar algunos métodos de JavaScript como a continuación

  1. self.location="http://www.example.com/index.php";

  2. window.location.href="http://www.example.com/index.php";

  3. document.location.href = 'http://www.example.com/index.php';

  4. window.location.replace("http://www.example.com/index.php");


Javascript se ejecuta en el cliente que puede o no ser lo que estás buscando.
chharvey

7

Sí, puedes usar la función header () ,

header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();

Y también la mejor práctica es llamar a la función exit () justo después de la header()función para evitar la ejecución del código a continuación.

De acuerdo con la documentación, header()debe llamarse antes de enviar cualquier salida real.


6

Como otros aquí dijeron, enviando el encabezado de ubicación con:

header( "Location: http://www.mywebsite.com/otherpage.php" );

pero debe hacerlo antes de enviar cualquier otra salida al navegador.

Además, si va a usar esto para bloquear usuarios no autenticados de ciertas páginas, como usted mencionó, tenga en cuenta que algunos agentes de usuarios ignorarán esto y continuarán en la página actual de todos modos, por lo que deberá morir ( ) después de enviarlo.


but you need to do it before you've sent any other output to the browser. ¡¡Increíble!! He estado buscando durante minutos por qué seguí recibiendo los encabezados que ya enviaron un error. +1 !!
josh

Más en general, tiene / detiene su script por completo /. die()es solo una forma de hacerlo.
MauganRa

6

Aquí están mis pensamientos:

En mi humilde opinión, la mejor manera de redirigir una solicitud entrante sería mediante el uso de encabezados de ubicación, que va

<?php
    header("Location: /index.php");
?>

Una vez que se ejecuta esta declaración y se envía la salida, el navegador comenzará a redirigir al usuario. Sin embargo, asegúrese de que no haya habido ninguna salida (echo / var_dump) antes de enviar encabezados, de lo contrario, se producirán errores.

Aunque esta es una forma rápida y sucia de lograr lo que se pidió originalmente, eventualmente resultaría ser un desastre de SEO, ya que este tipo de redirección siempre se interpreta como una redirección 301/302, por lo tanto, los motores de búsqueda siempre verán su página de índice como página redirigida, y no como una página de inicio / página principal.

Por lo tanto, afectará la configuración de SEO del sitio web.


1
exit () debe usarse inmediatamente después del encabezado ()
EKanadily

@docesam ... estuvo de acuerdo ... debería llamarse inmediatamente a exit () después de la llamada del encabezado (). Sin embargo, creo que si no hay más resultados en el navegador después de esta declaración de encabezado (), puede que no sea necesario salir () - Solo mi opinión
Bhaskar Pramanik

Sí, pero tiene que explicarlo porque alguien podría copiar su línea de código en su script y eso puede causarle mucho tiempo dando vueltas para descubrir qué salió mal.
EKanadily

1
@BhaskarPramanik imagina que tienes que cerrar una puerta rápidamente, pero luego tienes que tirarla / empujarla / aplastarla nuevamente para asegurarte de que ya esté cerrada o no ...
aswzen

5

La mejor manera de redirigir con PHP es el siguiente código ...

 header("Location: /index.php");

Asegúrese de que ningún código funcionará después

header("Location: /index.php");

Todo el código debe ejecutarse antes de la línea anterior.

Suponer,

Caso 1:

echo "I am a web developer";
header("Location: /index.php");

Redirigirá correctamente a la ubicación (index.php).

Caso 2:

return $something;
header("Location: /index.php");

El código anterior no redirigirá a la ubicación (index.php).


Ya hay una respuesta que tiene 1085 que contiene la información que proporciona, y mucho más.
Patrick Hund

5

Sí, es posible usar PHP. Redirigiremos a otra página.

Prueba el siguiente código:

<?php
    header("Location:./"); // Redirect to index file
    header("Location:index.php"); // Redirect to index file
    header("Location:example.php");
?>

4

1. Usando header, una función PHP incorporada

a) Redireccionamiento simple sin parámetros

<?php
   header('Location: index.php');
?>

b) Redirigir con parámetros GET

<?php
      $id = 2;
      header("Location: index.php?id=$id&msg=succesfully redirect");
  ?>

2. Redireccionar con JavaScript en PHP

a) Redireccionamiento simple sin parámetros

<?php
     echo "<script>location.href='index.php';</script>";
 ?>

b) Redirigir con parámetros GET

<?php
     $id = 2;
     echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
   ?>

El bit javascript de alguna manera era lo único que funcionaba en el alojamiento final del sitio; Creo que es una cuestión de almacenamiento en caché, pero con eso lo resolví de inmediato.
cdsaenz

3

Podemos hacerlo de dos maneras:

  1. Cuando el usuario ingresa a https://bskud.com/PINCODE/BIHAR/index.php, luego redirige a https://bskud.com/PINCODE/BIHAR.php

    Por el siguiente código PHP

    <?php
        header("Location: https://bskud.com/PINCODE/BIHAR.php");
        exit;
    ?>

    Guarde el código anterior en https://bskud.com/PINCODE/BIHAR/index.php

  2. Cuando cualquier condición sea verdadera, redirija a otra página:

    <?php
        $myVar = "bskud";
        if ($myVar == "bskud") {
    ?>
    
    <script> window.location.href="https://bskud.com";  </script>
    
    <?php
        }
        else {
            echo "<b>Check the website name again</b>";
        }
    ?>

¿Que es esto? Por favor, no use enlaces a su propio sitio web. Y el segundo ejemplo usa redirección de JavaScript, y no la header()función PHP .
Scriptman

2

Utilizar:

<?php
    $url = "targetpage"
    function redirect$url(){
        if (headers_sent()) == false{
            echo '<script>window.location.href="' . $url . '";</script>';
        }
    }
?>

1
¿Podría explicar la función de su código? Su respuesta se marcó debido a su longitud y contenido.
www139

2

Hay varias formas de hacerlo, pero si lo prefiere php, recomendaría el uso de la header()función.

Básicamente

$your_target_url = www.example.com/index.php”;
header(“Location : $your_target_url”);
exit();

Si quieres mejorarlo, es mejor usarlo en funciones. De esa manera, puede agregar autenticaciones y otros elementos de verificación.

Probemos comprobando el nivel del usuario.

Entonces, suponga que ha almacenado el nivel de autoridad del usuario en una sesión llamada u_auth.

En el function.php

<?php
    function authRedirect($get_auth_level,
                          $required_level,
                          $if_fail_link = www.example.com/index.php”){
        if ($get_auth_level != $required_level){
            header(location : $if_fail_link);
            return false;
            exit();
        }
        else{
            return true;
        }
     }

     . . .

Luego llamará a la función para cada página que desee autenticar.

Me gusta en page.phpo cualquier otra página.

<?php

    // page.php

    require function.php

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 5
    authRedirect($_SESSION[‘u_auth’], 5);

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 4
    authRedirect($_SESSION[‘u_auth’], 4);

    // Redirects to www.someotherplace.com/somepage.php if the
    // user isn’t authentication level 2
    authRedirect($_SESSION[‘u_auth’], 2, www.someotherplace.com/somepage.php”);

    . . .

Referencias;


2

Me gusta el tipo de redirección con el tiempo.

<?php

header("Refresh: 5;url=índex.php");

2

Usando la función de encabezado para el enrutamiento

<?php
     header('Location: B.php');
     exit();
?>

Supongamos que queremos enrutar desde el archivo A.php a B.php de lo que tenemos que tomar ayuda de <button>o <a>. Veamos un ejemplo.

<?php
if(isset($_GET['go_to_page_b'])) {
    header('Location: B.php');
    exit();

}
?>

<p>I am page A</p>
<button name='go_to_page_b'>Page B</button>

B.php

<p> I am Page B</p>

¿Puede proporcionar la solución precisa o buena?
Mehedi Abdullah

Ya hay muchas soluciones. Su solución ha mezclado HTML y PHP sin etiquetas PHP. En segundo lugar, envía el encabezado después de imprimir el código html, por lo que no funcionará. Y el nombre de los archivos de ejemplo son malos. No deberías nombrarlos A.php y B.php. Sé que es solo un ejemplo, pero aún así debería preocuparse por la convención de nomenclatura.
Tajni

1

Si está ejecutando en Apache, también puede usar .htaccess para redireccionar.

Redirect 301 / http://new-site.com/

1

Puede intentar usar la headerfunción PHP para hacer la redirección. Deberá configurar el búfer de salida para que su navegador no arroje una advertencia de redireccionamiento a la pantalla.

ob_start();
header("Location: " . $website);
ob_end_flush();

1
exit () debe usarse inmediatamente después del encabezado (). Además, el almacenamiento en búfer se ha activado automáticamente de forma predeterminada durante algún tiempo.
EKanadily

0

prueba este

 $url = $_SERVER['HTTP_REFERER'];
 redirect($url);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.