Tengo un montón de redireccionamientos 301 configurados en mi archivo .htaccess. Lo que me gustaría hacer es realizar un seguimiento de cuántas veces se usa una redirección, para poder administrarlos mejor.
¿Hay alguna manera de capturar y registrar coincidencias de redireccionamientos 301 que ocurren con PHP?
En otras palabras, si la redirección es:
RewriteRule ^about/bozo$ /about [R=301,L]
¿Hay alguna manera de capturar el "acerca de/bozo" cada vez que sucede usando PHP? (aunque los redireccionamientos son manejados por llamadas htaccess, y no por redireccionamientos de encabezado PHP)
No puede registrar una redirección 3xx que se activa anteriormente en la solicitud de Apache (por ejemplo, en .htaccess
) usando PHP. La redirección es completamente invisible para PHP.
No puede usar el Referer
HTTP para determinar si se produjo una redirección ya que el navegador conserva el Referer
de la solicitud inicial (si corresponde).
Las solicitudes que activan una redirección 3xx deben registrarse en el registro de acceso del servidor.
La única forma en que puede hacer esto con PHP es si marca la URL redirigida de alguna manera (quizás con una cadena de consulta) y verifica esto en su script PHP. Por ejemplo:
RewriteRule ^about/bozo$ /about?redirected=true [R=301,L]
... pero eso tal vez no sea deseable.
La respuesta de MrWhite es correcta: no puede ver esos redireccionamientos en PHP. Sin embargo, no necesita usar PHP para obtener las estadísticas que desea.
Si desea estadísticas sobre la frecuencia con la que ocurren esos redireccionamientos, puede obtenerlas del archivo access_log
de su servidor web. Cada redirección 301 debe agregar una entrada en el archivo de registro, independientemente de si la redirección fue activada por .htaccess o PHP. Tal entrada de registro debería verse así:
127.0.0.1 - - [01/Jan/2000:11:55:36 -0700] "GET /about/bozo HTTP/1.1" 301 456
Puede utilizar las herramientas de línea de comandos para contar los redireccionamientos:
grep '" 301 ' /var/log/apache2/access_log | wc -l
o
grep 'GET /about/bozo ' /var/log/apache2/access_log | wc -l
Donde grep
filtra el archivo de registro y wc -l
cuenta las líneas.