Redirección de URL

varios tipos diferentes de respuesta al navegador resultarán en una redirección. Estos varían en cuanto a si afectan a los encabezados HTTP o al contenido HTML. Las técnicas utilizadas suelen depender del papel de la persona que las implementa y de su acceso a diferentes partes del sistema. Por ejemplo, un autor web sin control sobre los encabezados puede usar una meta etiqueta de actualización, mientras que un administrador de servidor web que redirija todas las páginas de un sitio es más probable que use la configuración del servidor.,

manual redirectEdit

la técnica más simple es pedirle al visitante que siga un enlace a la nueva página, generalmente utilizando un ancla HTML como:

Please follow <a href="http://www.example.com/">this link</a>.

Este método se usa a menudo como una alternativa: si el navegador no admite la redirección automática, el visitante aún puede alcanzar el documento de destino siguiendo el enlace.

códigos de estado HTTP 3xxEdit

en el protocolo HTTP utilizado por la World Wide Web, una redirección es una respuesta con un código de estado que comienza con 3 que hace que un navegador muestre una página diferente., Si un cliente encuentra una redirección, necesita tomar una serie de decisiones sobre cómo manejar la redirección. Los clientes utilizan diferentes códigos de estado para comprender el propósito de la redirección, cómo manejar el almacenamiento en caché y qué método de solicitud usar para la solicitud posterior.

HTTP / 1.1 define varios códigos de estado para la redirección (RFC 7231):

  • 300 opciones múltiples (por ejemplo, ofrecer diferentes idiomas)
  • 301 movido permanentemente (redirige permanentemente de una URL a otra pasando el valor de enlace a la página redirigida)
  • 302 encontrado (originalmente «redirección temporal» en HTTP/1.,0 y popularmente utilizado para scripts CGI; reemplazado por 303 y 307 en HTTP/1.,i> 303 Ver otro (fuerza una solicitud GET a la nueva URL incluso si la solicitud original era POST)
  • 307 redirección temporal (proporciona una nueva URL para que el navegador vuelva a enviar una solicitud GET o POST)
  • 308 redirección permanente (proporciona una nueva URL para que el navegador vuelva a enviar una solicitud GET o POST)

redirección de códigos de estado y característicasedit

código de estado HTTP versión HTTP temporal / permanente Cacheable método de solicitud solicitud posterior
301 http/1.,0 Permanent Yes GET / POST may change
302 HTTP/1.0 Temporary not by default GET / POST may change
303 HTTP/1.1 Temporary never always GET
307 HTTP/1.1 Temporary not by default may not change
308 HTTP/1.,1 Permanente por defecto no puede cambiar

Todos estos códigos de estado requieren la URL de la redirección de destino que se dará en la Ubicación: cabecera de la respuesta HTTP. Las 300 opciones múltiples generalmente listarán todas las opciones en el cuerpo del mensaje y mostrarán la opción predeterminada en el encabezado Location:.

(Los códigos de Estado 304 no modificados y 305 Use proxy no son redireccionamientos).,

ejemplo de respuesta HTTP para una redirección 301editar

una respuesta HTTP con la redirección 301 «movida permanentemente» se ve así:

usando scripts del lado del servidor para redirección edit

Los autores Web que producen contenido HTML generalmente no pueden crear redirecciones utilizando encabezados HTTP, ya que estos son generados automáticamente por el programa del servidor web cuando se sirve un archivo HTML. Lo mismo es generalmente cierto incluso para los programadores que escriben scripts CGI, aunque algunos servidores permiten que los scripts agreguen encabezados personalizados (por ejemplo, habilitando «encabezados no analizados»)., Muchos servidores web generarán un código de estado 3xx si un script produce una línea de encabezado » Location:». Por ejemplo, en PHP, se puede usar la función «header»:

header('HTTP/1.1 301 Moved Permanently');header('Location: http://www.example.com/');exit();

Se pueden requerir más encabezados para evitar el almacenamiento en caché. El programador debe asegurarse de que los encabezados se emiten antes que el cuerpo. Esto puede no encajar fácilmente con el flujo natural de control a través del código. Para ayudar con esto, algunos marcos para la generación de contenido del lado del servidor pueden almacenar en búfer los datos del cuerpo., En el lenguaje de scripting ASP, esto también se puede lograr usando response.buffer=true y response.redirect "http://www.example.com/" HTTP / 1.1 permite una referencia URI relativa o una referencia URI absoluta. Si la referencia URI es relativa, el cliente calcula la referencia URI absoluta requerida de acuerdo con las reglas definidas en RFC 3986.

Servidor HTTP Apache mod_rewriteEdit

la extensión Mod_alias del Servidor HTTP Apache se puede usar para redirigir ciertas solicitudes., Las directivas de configuración típicas se ven como:

para una reescritura y redirección de URL más flexible, se puede usar Apache mod_rewrite. Por ejemplo, para redirigir solicitudes a un nombre de dominio canónico:

RewriteEngine onRewriteCond %{HTTP_HOST} ^(+\.)*oldsite\.example\.com\.?(:*)?$ RewriteRule ^(.*)$ http://newsite.example.net/$1 

dicha configuración se puede aplicar a uno o todos los sitios en el servidor a través de los archivos de configuración del servidor o a un solo directorio de contenido a través de un archivo .htaccess.,

nginx rewriteEdit

Nginx tiene un módulo de reescritura http integrado, que se puede utilizar para realizar un procesamiento avanzado de URL e incluso la generación de páginas web (con la directiva return). Un ejemplo de este uso avanzado del módulo de reescritura es mdoc.su, que implementa un servicio de acortamiento de URL determinista completamente con la ayuda del lenguaje de configuración nginx solo.

por ejemplo, si una solicitud para/DragonFlyBSD / HAMMER.5 si llegase, primero sería redirigido internamente a / D / HAMMER.,5 con la primera directiva de reescritura (que solo afecta al estado interno, sin ninguna respuesta HTTP emitida al cliente todavía), y luego con la segunda directiva de reescritura, una respuesta HTTP con un código de estado 302 encontrado sería emitida al cliente para redirigir al script CGI externo de web-man:

Refresh Meta tag y HTTP refresh headerEdit

Netscape introdujo la característica meta refresh que actualiza una página después de una cierta cantidad de tiempo. Esto puede especificar una nueva URL para reemplazar una página con otra. Esto es compatible con la mayoría de los navegadores web., Un tiempo de espera de cero segundos produce una redirección inmediata. Esto es tratado como un redireccionamiento permanente 301 por Google, permitiendo la transferencia de PageRank a la página de destino.

Este es un ejemplo de un documento HTML simple que utiliza esta técnica:

esta técnica puede ser utilizada por los autores web porque la etiqueta meta está contenida dentro del propio documento. La etiqueta meta debe colocarse en la sección «head» del archivo HTML. El número «0» en este ejemplo puede ser reemplazado por otro número para lograr un retraso de tantos segundos., El anclaje en la sección «cuerpo» es para usuarios cuyos navegadores no admiten esta función.

el mismo efecto se puede lograr con un encabezado HTTP refresh:

Esta respuesta es más fácil de generar por programas CGI porque uno no necesita cambiar el código de estado predeterminado.

Aquí hay un simple programa CGI que realiza este redireccionamiento:

Nota: generalmente, el Servidor HTTP agrega la línea de estado y el encabezado Content-Length automáticamente.,

el W3C desaconseja el uso de meta refresh, ya que no comunica ninguna información sobre el recurso original o nuevo, al navegador (o motor de búsqueda). Las pautas de accesibilidad al contenido Web del W3C (7.4) desalientan la creación de páginas de actualización automática, ya que la mayoría de los navegadores web no permiten al usuario deshabilitar o controlar la frecuencia de actualización. Algunos artículos que han escrito sobre el tema incluyen pautas de accesibilidad de contenido Web del W3C (1.0): garantizar el control del usuario de los cambios de contenido sensibles al tiempo, usar redirecciones estándar: ¡no rompa el botón Atrás!, y técnicas básicas para pautas de accesibilidad de contenido Web 1.0 sección 7.

Redireccioneseditar

JavaScript puede causar una redirección configurando el atributo window.location, por ejemplo:

window.location='http://www.example.com/'

normalmente JavaScript empuja la URL del sitio del redirector al historial del navegador. Puede causar bucles de redirección cuando los usuarios presionan el botón Atrás. Con el siguiente comando puede evitar este tipo de comportamiento.,

window.location.replace('http://www.example.com/')

Sin embargo, los encabezados HTTP o la Etiqueta Meta refresh pueden ser preferidos por razones de seguridad y porque JavaScript no será ejecutado por Algunos navegadores y muchos rastreadores web.

Redireccioneseditar

Se puede lograr un efecto ligeramente diferente creando un marco en línea:

<iframe height="100%" width="100%" src="http://www.example.com/">Please follow <a href="http://www.example.com/">link</a>.</iframe>

una diferencia principal con los métodos de redirección anteriores es que para una redirección de marco, el navegador muestra la URL del documento de marco y no la URL de la página de destino en la barra de URL., Esta técnica de encubrimiento se puede utilizar para que el lector vea una URL más memorable o para ocultar fraudulentamente un sitio de phishing como parte de la suplantación de identidad del sitio web.

antes de HTML5, el mismo efecto se podía hacer con un marco HTML que contiene la página de destino:

redirect chainsEdit

una redirección puede llevar a otra. Por ejemplo, la URL «http://wikipedia.com» (con «*.com» como dominio) se redirige primero a https://www.wikipedia.org/ (con nombre de dominio en .org), donde puede navegar al sitio específico del idioma., Esto es inevitable si los diferentes enlaces en la cadena son servidos por diferentes servidores, aunque debe minimizarse reescribiendo la URL tanto como sea posible en el servidor antes de devolverla al navegador como una redirección.

Wikipedia ha estado redirigiendo sus páginas a HTTPS de forma predeterminada desde 2015.

redirect loopsEdit

a veces un error puede hacer que una página termine redireccionándose a sí misma, posiblemente a través de otras páginas, lo que lleva a una secuencia infinita de redirecciones. Los navegadores deben dejar de redirigir después de un cierto número de saltos y mostrar un mensaje de error.

El HTTP / 1.,1 estados estándar:

un cliente debe detectar e intervenir en redirecciones cíclicas (es decir, bucles de redirección «infinitos»).

Nota: Una versión anterior de esta especificación recomendó un máximo de cinco redirecciones (, sección 10.3). Los desarrolladores de contenido deben ser conscientes de que algunos clientes podrían implementar dicha limitación fija.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *