Arreglar problemas de redirecciones con cURL

curl

Un problema bastante frecuente con el que me encuentro a menudo en Codeable son los errores de redirecciones, causadas por plugins, configuraciones incorrectas del archivo .htaccess o que provienen de Cloudflare, o incluso desde javascript; en ocasiones es una combinación de varios de estos factores.

Para encontrar los causantes de estos problemas, lo primero que tenemos que hacer es ver dichas redirecciones, a dónde nos llevan y las cabeceras de los resultados. Pero si ponemos la URL en el navegador, lo que veremos en la mayoría de los casos es la URL final, por lo que usaremos cURL.

cURL es una utilidad imprescindible para todo desarrollador web, que podemos utilizar para multitud de tareas, desde obtener datos de una API externa hasta hacer Debug de las cabeceras de las peticiones web.

En mi caso, que utilizo Windows 10, uso WSL (con Ubuntu 18.04) que ya forma parte de mi trabajo diario desde que anunciaron su beta. El comando a utilizar es:

curl -s -L --max-redirs 5 -D - http://direccion-web.com -o /dev/null  -w '%{url_effective}'

En primer lugar escribimos el comando curl seguido de los siguientes parámetros:

  • -s para habilitar el modo silencioso.
  • -L para seguir las redirecciones.
  • --max-redirs X para indicar el número de redirecciones a seguir (indicado por X) ya que por defecto, si no ponemos nada, seguiría 50 redirecciones y en las redirecciones en bucle con un número mucho más bajo es suficiente.
  • -D - para realizar un volcado de las cabeceras aquí.
  • http://direccion-web.comla URL que queremos inspeccionar.
  • -o /dev/null redirigir la salida a /dev/nulles decir, no mostramos la salida que sería el html resultante de la página.
  • -w '%{url_effective}'escribir de nuevo la salida de las cabeceras a pantalla después de haber ocultado antes el resto de la salida.

Y el resultado que obtenemos es algo similar a lo siguiente en el que podemos comprobar que sólo se ha realizado una redirección para pasar de la versión http a la versión https y además cambiar la versión www por la versión canonical sin www.

curl detectando redirecciones

Ahora ya podemos ponernos a investigar dependiendo de si las redirecciones vienen de WordPress, CloudFlare u otro CDN o herramienta externa, si se realiza por javascript una vez cargado el HTML de la página, etc.

Y para cualquier duda de curl ya sabéis que tenéis su manual con man curl u online desde https://curl.haxx.se/docs/manpage.html

Redirecciones de WordPress

Pero además de las redirecciones que podemos tener desde Apache o Nginx, estas también pueden venir de WordPress realizadas mediante wp_redirect o wp_safe_redirect que llevarán la cabecera X-Redirect-By normalmente con el valor WordPress, aunque dicho valor puede ser otro declarado por un plugin o personalizado.

Para evitar algunas redirecciones mientras hacemos DEBUG de nuestro código, podemos eliminar redirecciones problemáticas con el siguiente código en el functions.php de nuestro tema activo:

remove_action( 'template_redirect', 'redirect_canonical' );

Deja un comentario