¿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.php
y 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.
protection from unauthorized users
redireccionamiento; así no es como se deben hacer las cosas;)Respuestas:
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).2. Detalles importantes
morir () o salir ()
Por qué deberías usar
die()
oexit()
: The Daily WTFURL 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 PHP4. 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:
Esto es más flexible:
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:O incluso una redirección de JavaScript.
fuente
header('Location: '.$newURL);
debe ser antes de que se haya pasado cualquier HTML (o texto) al navegador, o no funcionará correctamente.http-equiv="Location"
no es compatible con todos los navegadores. ¡Deberías usarrefresh
en su lugar!<meta http-equiv="refresh" content="0;url=http://example.com/">
Use la
header()
función para enviar un encabezado HTTPLocation
: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 :
Resultado de tres ejecuciones:
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" elLocation:
encabezado. Enviar un encabezado no detiene la ejecución de PHP, independientemente del cliente utilizado.fuente
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 necesarioexit
. 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..htaccess
redirigir, pero necesito una forma de transmitir de alguna manera qué dominio redirigió al dominio final.¡No olvides morir () / salir ()!
fuente
Salida de JavaScript desde PHP usando echo, que hará el trabajo.
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?
fuente
Cannot modify header information - headers already sent by
error común .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()
oexit()
después de la función de encabezado.aquí no tendrás ningún problema
fuente
¡La mayoría de estas respuestas están olvidando un paso muy importante!
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.
fuente
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 + 1Utilizar:
O si ya ha abierto etiquetas PHP, use esto:
También puede redirigir a páginas externas, por ejemplo:
Asegúrese de incluir
exit()
o incluirdie()
.fuente
Puede usar variables de sesión para controlar el acceso a las páginas y también autorizar usuarios válidos:
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.
fuente
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 ...
fuente
header( 'Location: http://www.yoursite.com/new_page.html' );
fuente
.htaccess
redirigir, pero necesito una forma de transmitir de alguna manera qué dominio redirigió al dominio final.Utiliza el siguiente código:
fuente
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 unStatus
encabezado previamente configurado para redirigir correctamente).También he manejado el tema de apoyo a los diferentes códigos de redirección HTTP (
301
,302
,303
y307
), ya que se trata en los comentarios de mi respuesta anterior. Aquí están las descripciones:fuente
Para redirigir al visitante a otra página (particularmente útil en un bucle condicional), simplemente use el siguiente código:
En este caso,
mypage.php
es 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:
Si alguna vez la página de destino está en otro servidor, incluye la URL completa:
Encabezados HTTP
Según el protocolo HTTP, los encabezados HTTP deben enviarse a
before
cualquier 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:
Por ejemplo, esta página tiene el siguiente código:
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 laexit()
función a fin de disminuir la carga del servidor:fuente
¶
(cerca del final del segundo párrafo)? ¿Quieres decir en su¶
lugar (así que todo se leemypage.php?param1=val1¶m2=val2)
)? (La entidad HTML para ) es "¶", ¿quizás algún programa externo realizó una conversión?).Utilizar:
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:
fuente
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 ...
fuente
Puede usar algunos métodos de JavaScript como a continuación
self.location="http://www.example.com/index.php";
window.location.href="http://www.example.com/index.php";
document.location.href = 'http://www.example.com/index.php';
window.location.replace("http://www.example.com/index.php");
fuente
Sí, puedes usar la función header () ,
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.fuente
Como otros aquí dijeron, enviando el encabezado de ubicación con:
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.
fuente
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 !!die()
es solo una forma de hacerlo.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
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.
fuente
La mejor manera de redirigir con PHP es el siguiente código ...
Asegúrese de que ningún código funcionará después
Todo el código debe ejecutarse antes de la línea anterior.
Suponer,
Caso 1:
Redirigirá correctamente a la ubicación (index.php).
Caso 2:
El código anterior no redirigirá a la ubicación (index.php).
fuente
Sí, es posible usar PHP. Redirigiremos a otra página.
Prueba el siguiente código:
fuente
1. Usando
header
, una función PHP incorporadaa) Redireccionamiento simple sin parámetros
b) Redirigir con parámetros GET
2. Redireccionar con JavaScript en PHP
a) Redireccionamiento simple sin parámetros
b) Redirigir con parámetros GET
fuente
Podemos hacerlo de dos maneras:
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
Guarde el código anterior en https://bskud.com/PINCODE/BIHAR/index.php
Cuando cualquier condición sea verdadera, redirija a otra página:
fuente
header()
función PHP .Utilizar:
fuente
Hay varias formas de hacerlo, pero si lo prefiere
php
, recomendaría el uso de laheader()
función.Básicamente
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
Luego llamará a la función para cada página que desee autenticar.
Me gusta en
page.php
o cualquier otra página.Referencias;
fuente
Me gusta el tipo de redirección con el tiempo.
fuente
Usando la función de encabezado para el enrutamiento
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.B.php
fuente
Si está ejecutando en Apache, también puede usar .htaccess para redireccionar.
fuente
Puede intentar usar la
header
funció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.fuente
prueba este
fuente